oracle pl/sql 小知识

1. procedure 或者 function 中 对 null 和 ” 的判断

    CREATE OR REPLACE PROCEDURE TEST(PARA IN VARCHAR2)
    IS
    BEGIN
        IF PARA = '' THEN
            DBMS_OUTPUT.PUT_LINE('I AM '''' !');
        ELSIF PARA IS NULL THEN
            DBMS_OUTPUT.PUT_LINE('I AM NULL');
        ELSE
            DBMS_OUTPUT.PUT_LINE('NO TEST');
        END IF;
    END;

测试结果:

exec TEST('');
I AM NULL

PL/SQL procedure successfully completed.

SQL> exec TEST(' ');
NO TEST

PL/SQL procedure successfully completed.

结论:
PARA = ” 没有什么实际效果,如果是赋值还可,比较就算了

2. 变量赋值

请使用 := 而不是 =
   CREATE OR REPLACE PROCEDURE TEST2(OPER_TYPE IN VARCHAR2)
    IS
     v_staff_str varchar2(50) ;
    BEGIN
         v_staff_str := ' and staff_id= 100000 '  ;
        DBMS_OUTPUT.PUT_LINE(v_staff_str||' 1');
    END;   

    CREATE OR REPLACE PROCEDURE TEST2(OPER_TYPE IN VARCHAR2)
    IS
     v_staff_str varchar2(50) := ' and staff_id= 100000 '  ;
    BEGIN
        -- v_staff_str  ;
        DBMS_OUTPUT.PUT_LINE(v_staff_str||' 1');
    END;   

    CREATE OR REPLACE PROCEDURE TEST2(OPER_TYPE IN VARCHAR2)
    IS
    BEGIN
        -- v_staff_str  ;
         declare v_staff_str varchar2(50)  ;
        begin
         v_staff_str := ' and staff_id = 100000 ' ;
        DBMS_OUTPUT.PUT_LINE(v_staff_str||' 1');
        end;
    END;   

    CREATE OR REPLACE PROCEDURE TEST2(OPER_TYPE IN VARCHAR2)
    IS
    BEGIN
        -- v_staff_str  ;
         declare v_staff_str varchar2(50) := ' and staff_id = 100000 '  ;
        begin
        DBMS_OUTPUT.PUT_LINE(v_staff_str||' 1');
        end;
    END;   

3.传入参数和表列名相同

传入参数将会被覆盖
CREATE OR REPLACE PROCEDURE TEST2(OPER_TYPE IN VARCHAR2)
    IS
     v_staff_str    varchar2(50);
    BEGIN
        DBMS_OUTPUT.PUT_LINE(OPER_TYPE||' 1');
        insert into tmp_s 
        select OPER_TYPE from table1 log
        inner join table2 staff  staff.staff_id=log.staff_id
        where log.seqid=37968813;
    END;

测试结果:

SQL> exec TEST2(‘haha2’);
haha2 1

PL/SQL procedure successfully completed.

SQL> select * from tmp_s;


STAFF_CODE
---------------
hehe
haha
3PD

结论:
haha2 没有插入,被表列覆盖

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值