PL / SQL功能-2

本文深入探讨了Oracle数据库中PL/SQL函数的创建与使用,包括具有默认参数的函数、输入输出功能函数以及执行过程示例。通过具体代码展示了如何定义函数,处理异常,以及如何在SQL提示符下调用带有输出模式的函数。

具有默认参数的功能

==================================


CREATE OR REPLACE function weekdaysinmonth(mdate date default
 sysdate-(to_char(sysdate,'dd')-1),weekday integer default 1)  return varchar2 
 as
     myexp exception;
     cursor c1(dt date) is
     with dtsun as (select dt + level-1 dm,
     to_char(dt+ level-1,'d') dy
     from dual connect by level <=to_char(last_day(dt),'dd'))
     select count(dm) from dtsun where dy=weekday;
     mcount number(4);
     wkd varchar2(10);
 begin
     if weekday>7 or weekday<=0 then
         raise myexp;
     end if;
     if to_char(mdate,'dd')<>1 then
         raise myexp;
     end if;
     open c1(mdate);
     fetch c1 into mcount;
     close c1;
     case weekday
     when 2 then
     wkd:='Mon';
     when 3 then
     wkd:='Tue';
     when 4 then
     wkd:='Wed';
     when 5 then
     wkd:='Thu';
     when 6 then
     wkd:='Fri';
     when 7 then
     wkd:='Sat';
     else
     wkd:='Sun';
     end case;
     return ('Number of '|| wkd || ' in '||to_char(mdate,'Month') || ' is ' || mcount);
exception
    when myexp then
         return ('supplied date should be first of the month and weekday should be between 1-7');
    when others then
         return null;
end; 

功能不带参数

===========================


CREATE OR REPLACE FUNCTION out_func (outparm OUT VARCHAR2)
RETURN VARCHAR2 IS 
BEGIN
  outparm := 'out param';
  RETURN 'return param';
END out_func; 
执行

---------------------------

 
DECLARE
  retval VARCHAR2(50);
  outval VARCHAR2(50);
BEGIN
  retval := out_func(outval);
  dbms_output.put_line(outval);
  dbms_output.put_line(retval);
END;  
输入输出功能

=========================


--through the same variable the function accepts the value and returns the value.
CREATE FUNCTION ANSAL(ENO IN OUT NUMBER)
RETURN NUMBER
IS BEGIN
SELECT (SAL+NVL(COMM,0))*12 INTO ENO FROM EMP WHERE EMPNO=ENO;
RETURN ENO;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('NO MATCHING DATA FOUND');
RETURN 0;
END; 
执行

------------------------


--Since the procedure contains out mode it can't be called directly at SQL Prompt.
DECLARE
NO NUMBER(5):=&NO;
SALARY NUMBER(5);
BEGIN
SALARY:=ANSAL(NO);
DBMS_OUTPUT.PUT_LINE(SALARY);
END; 

还要检查

Oracle技巧和窍门-PL / SQL-功能-1

From: https://bytes.com/topic/oracle/insights/743255-pl-sql-functions-2-a

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值