• 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;
  • 相关阅读:
    vim编辑swap file
    fork: retry: Resource temporarily unavailable 解决方案
    扫描目录下的文件并拼接在一起
    linux 下批量创建文件夹
    存储过程批量插入表数据
    多用户登录系统操作流程——Python多线程
    触发器报错“Not allowed to return a result set from a trigger”的解决方案
    window + anaconda + python3.6 + dlib
    查看Ubantu磁盘信息
    numpy和tensorflow中矩阵乘法的区别
  • 原文地址:https://www.cnblogs.com/kakaisgood/p/12673112.html
Copyright © 2020-2023  润新知