PL/SQL Basic

--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;

 

posted @ 2020-04-10 14:05  kakaisgood  阅读(149)  评论(0编辑  收藏  举报