--PL/SQL块结构 DECLARE /* *定义部分-定义常量,变量,复杂数据类型,游标。 可选 没有; */ BEGIN /* *执行部分-sql语句 必须 没有; */ EXCEPTION /* *例外处理部分-处理运行错误 可选 没有; */ END;/*块结束标志 必须;*/ set serveroutput on BEGIN DBMS_OUTPUT.PUT_LINE('Hello'); END; DECLARE v_ename VARCHAR(8); BEGIN SELECT USER_ID INTO v_ename FROM T1 WHERE USER_PASSWORD=&UP; DBMS_OUTPUT.PUT_LINE('USER_ID:'||v_ename); EXCEPTION --WHEN NO_DATA_FOUND THEN WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('PLEASE INPUT CORRECT NBR'); END; --PL/SQL 块分类 --匿名块 --命令块 --子程序(过程/函数/包) --触发器 --定义并使用变量 --1 常用标量变量 /* VARCHAR2()/ CHAR()/ NUMBER(p,s)p精度-总长,s标度-小数点后数据位。 NUMBER(6,2),整数位最大为4 DATE LONG BOOLEAN */ --2 定义标量变量 /* 变量名 [常量] datetype [NOT NULL] [:= 或者 DEFAULT expr ] v_ename VARCHAR2(10); v_sal NUMBER(6,2); v_balance BINARY_FLOAT; c_tax_rate CONSTANT NUMBER(3,2) :=5.5; v_hiredate DATE; v_valid BOOLEAN NOT NULL DEFAULT FALSE; */ --3 使用标量变量 /* PL/SQL块种为变量赋值不同于其他语言,必须再等号前加冒号 :=
DECLARE
v_acct T.ACCT_NUM%TYPE;
v_balance T.BALANCE_AMT%TYPE;
c_rate CONSTANT NUMBER(2,1) :=0.5;
v_half_bal v_balance%TYPE;
BEGIN
SELECT ACCT_NUM,BALANCE_AMT INTO v_acct,v_balance FROM T WHERE ROWNUM<2 AND BALANCE_AMT > 0;
v_half_bal := v_balance * c_rate;
DBMS_OUTPUT.PUT_LINE('ACCT:'||v_acct||'/HALF-VAL:'||v_half_bal);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('ERROR');
END;
参考变量
1. REF CURSOR
2. REF obj_type
DECLARE --TYPE c1 IS REF CURSOR; --fin_cursor c1; fin_cursor sys_refcursor; v_acct T.ACCT_NUM%TYPE; v_balance T.BALANCE_AMT%TYPE; BEGIN OPEN fin_cursor FOR SELECT ACCT_NUM,BALANCE_AMT INTO v_acct,v_balance FROM T WHERE ROWNUM<5 AND BALANCE_AMT > 0; LOOP FETCH fin_cursor INTO v_acct,v_balance; EXIT WHEN fin_cursor%NOTFOUND; DBMS_OUTPUT.PUT_LINE('ACCT:'||v_acct||'/VAL:'||v_balance); END LOOP; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('OTHERS'); END;