Обсуждение: [HELP] Defining a function as a procedure

Поиск
Список
Период
Сортировка

[HELP] Defining a function as a procedure

От
"Daniel Caune"
Дата:
<div class="Section1"><p class="MsoNormal"><font face="Arial" size="2"><span style="font-size:10.0pt;
font-family:Arial">Hi,</span></font><p class="MsoNormal"><font face="Arial" size="2"><span style="font-size:10.0pt;
font-family:Arial"> </span></font><p class="MsoNormal"><font face="Arial" size="2"><span lang="EN-CA" style="font-size:
10.0pt;font-family:Arial">Is there a way to define a function as a procedure, I mean a function that returns
nothing.</span></font><pclass="MsoNormal"><font face="Arial" size="2"><span lang="EN-CA" style="font-size: 
10.0pt;font-family:Arial"> </span></font><p class="MsoNormal" style="text-autospace:none"><font color="blue"
face="CourierNew" size="2"><span lang="EN-CA" style="font-size:10.0pt;font-family:"Courier New"; 
color:blue">CREATE OR </span></font><font face="Courier New" size="2"><span lang="EN-CA"
style="font-size:10.0pt;font-family:"CourierNew"">REPLACE FUNCTION foo(<in-parameters>)</span></font><p
class="MsoNormal"><fontcolor="blue" face="Courier New" size="2"><span lang="EN-CA"
style="font-size:10.0pt;font-family:"CourierNew";color:blue">AS </span></font><font face="Courier New" size="2"><span
lang="EN-CA"style="font-size:10.0pt;font-family: 
"Courier New"">$$</span></font><p class="MsoNormal" style="text-autospace:none"><font color="blue" face="Courier New"
size="2"><spanlang="EN-CA" style="font-size:10.0pt;font-family:"Courier New"; 
color:blue">BEGIN</span></font><p class="MsoNormal" style="text-autospace:none"><font color="blue" face="Courier New"
size="2"><spanlang="EN-CA" style="font-size:10.0pt;font-family:"Courier New"; 
color:blue">  <update-some-tables></span></font><p class="MsoNormal" style="text-autospace:none"><font
color="blue"face="Courier New" size="2"><span lang="EN-CA" style="font-size:10.0pt;font-family:"Courier New"; 
color:blue">END</span></font><font face="Courier New" size="2"><span lang="EN-CA"
style="font-size:10.0pt;font-family:"CourierNew"">;</span></font><p class="MsoNormal"><font face="Courier New"
size="2"><spanlang="EN-CA" style="font-size:10.0pt;font-family:"Courier New"">$$ <font color="blue"><span
style="color:blue">LANGUAGE</span></font>'plpgsql';</span></font><font face="Arial" size="2"><span lang="EN-CA"
style="font-size:10.0pt;font-family:Arial"></span></font><pclass="MsoNormal"><font face="Arial" size="2"><span
lang="EN-CA"style="font-size: 
10.0pt;font-family:Arial"> </span></font><p class="MsoNormal"><font face="Arial" size="2"><span lang="EN-CA"
style="font-size:
10.0pt;font-family:Arial">Actually, PostgreSQL complains as a “function result type must be specified”.  I can patch my
functionso that it compiles but that won’t be really nice:</span></font><p class="MsoNormal"><font face="Arial"
size="2"><spanlang="EN-CA" style="font-size: 
10.0pt;font-family:Arial"> </span></font><p class="MsoNormal" style="text-autospace:none"><font color="blue"
face="CourierNew" size="2"><span lang="EN-CA" style="font-size:10.0pt;font-family:"Courier New"; 
color:blue">CREATE OR </span></font><font face="Courier New" size="2"><span lang="EN-CA"
style="font-size:10.0pt;font-family:"CourierNew"">REPLACE FUNCTION foo(<in-parameters>)</span></font><p
class="MsoNormal"style="text-autospace:none"><font face="Courier New" size="2"><span
style="font-size:10.0pt;font-family:"CourierNew"">  RETURNS <font color="blue"><span
style="color:blue">int</span></font></span></font><pclass="MsoNormal"><font color="blue" face="Courier New"
size="2"><spanlang="EN-CA" style="font-size:10.0pt;font-family:"Courier New";color:blue">AS </span></font><font
face="CourierNew" size="2"><span lang="EN-CA" style="font-size:10.0pt;font-family: 
"Courier New"">$$</span></font><p class="MsoNormal" style="text-autospace:none"><font color="blue" face="Courier New"
size="2"><spanlang="EN-CA" style="font-size:10.0pt;font-family:"Courier New"; 
color:blue">BEGIN</span></font><p class="MsoNormal" style="text-autospace:none"><font color="blue" face="Courier New"
size="2"><spanlang="EN-CA" style="font-size:10.0pt;font-family:"Courier New"; 
color:blue">  <update-some-tables></span></font><p class="MsoNormal" style="text-autospace:none"><font
face="CourierNew" size="2"><span lang="EN-CA" style="font-size:10.0pt;font-family:"Courier New"">  <font
color="blue"><spanstyle="color:blue">RETURN </span></font>1;</span></font><p class="MsoNormal"
style="text-autospace:none"><fontcolor="blue" face="Courier New" size="2"><span lang="EN-CA"
style="font-size:10.0pt;font-family:"CourierNew"; 
color:blue">END</span></font><font face="Courier New" size="2"><span lang="EN-CA"
style="font-size:10.0pt;font-family:"CourierNew"">;</span></font><p class="MsoNormal"><font face="Courier New"
size="2"><spanlang="EN-CA" style="font-size:10.0pt;font-family:"Courier New"">$$ <font color="blue"><span
style="color:blue">LANGUAGE</span></font>'plpgsql';</span></font><font face="Arial" size="2"><span lang="EN-CA"
style="font-size:10.0pt;font-family:Arial"></span></font><pclass="MsoNormal"><font face="Arial" size="2"><span
lang="EN-CA"style="font-size: 
10.0pt;font-family:Arial"> </span></font><p class="MsoNormal"><font face="Arial" size="2"><span lang="EN-CA"
style="font-size:
10.0pt;font-family:Arial">Is there any other prettier way to do that?</span></font><p class="MsoNormal"><font
face="Arial"size="2"><span lang="EN-CA" style="font-size: 
10.0pt;font-family:Arial"> </span></font><p class="MsoNormal"><font face="Arial" size="2"><span lang="EN-CA"
style="font-size:
10.0pt;font-family:Arial">Thanks,</span></font><p class="MsoNormal"><font face="Arial" size="2"><span lang="EN-CA"
style="font-size:
10.0pt;font-family:Arial"> </span></font><p class="MsoNormal"><font face="Arial" size="2"><span lang="EN-CA"
style="font-size:
10.0pt;font-family:Arial"> </span></font><p class="MsoNormal"><font face="Arial" size="2"><span lang="EN-CA"
style="font-size:
10.0pt;font-family:Arial">--</span></font><p class="MsoNormal"><font face="Arial" size="2"><span lang="EN-CA"
style="font-size:
10.0pt;font-family:Arial">Daniel</span></font><span lang="EN-CA"></span><p class="MsoNormal"><font face="Times New
Roman"size="3"><span lang="EN-CA" style="font-size:12.0pt"> </span></font></div> 

Re: [HELP] Defining a function as a procedure

От
Tom Lane
Дата:
"Daniel Caune" <daniel.caune@ubisoft.com> writes:
> Is there a way to define a function as a procedure, I mean a function
> that returns nothing.

In recent versions you can say RETURNS VOID, which is a bit of a hack
but it gets the point across...
        regards, tom lane