标签:数据 atl boolean 之间 字符串 where constant oca mes
在编写pl/sql程序时,可以定义变量和常量;在pl/sql程序中包括有:
变量初始化和关键字:
identifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr];
演示:
declare v_city varchar2(30) NOT NULL := ‘Beijing‘; v_location varchar2(13) := ‘Atlanta‘; v_deptno number(2) NOT NULL := 10; v_mgr number(6) DEFAULT 100; v_hiredate date; v_date date := to_date(‘20110117‘,‘yyyymmdd‘); v_rowid rowid; b_flag boolean; begin null; end; /
declare ename varchar2(20) :=‘KING‘; begin delete emp where ename=ename; end; /
例题一:创建一个匿名PL/SQL块,将下列字符输出到屏幕:"today is : 在此处显示当前时间"
set serveroutput on ----打开允许客户端输出 begin DBMS_OUTPUT.PUT_LINE(‘today is : ‘||sysdate); end; /
declare v_var1 number := 123; begin dbms_output.put_line(‘OUT: v_var1 :‘||v_var1); declare v_var2 number := 456; begin dbms_output.put_line(‘IN: v_var1 :‘||v_var1); dbms_output.put_line(‘IN: v_var2 :‘||v_var2); END; -- dbms_output.put_line(‘IN: v_var2 :‘||v_var2); 内部块中的变量不能被外部块使用. 去掉注释则报错 end; / 输出结果: OUT: v_var1 :123 IN: v_var1 :123 IN: v_var2 :456 PL/SQL procedure successfully completed.
标签加载一个语句块开始的位置上。
当外部块和内部块出现同名变量时,借助标签来区分,但这样的程序可读性太差,尽量不要使变量名重复。
<<outer>> declare v_var1 number := 123; begin dbms_output.put_line(‘OUT: v_var1 :‘||v_var1); <<inner>> declare v_var1 number := 456; begin dbms_output.put_line(‘IN: v_var1 :‘||v_var1); dbms_output.put_line(‘IN: outer v_var1 :‘||outer.v_var1); END inner; end outer; / SQL> / OUT: v_var1 :123 IN: v_var1 :456 IN: outer v_var1 :123 PL/SQL procedure successfully completed.
declare v_ename varchar2(20); v_job varchar2(20); v_sal number; v_date date; v_info varchar2(100); begin /* select ename,job,sal,hiredate into v_ename,v_job,v_sal,v_date from scott.emp where ename=‘KING‘; dbms_output.put_line(v_ename||‘ ‘||v_job||‘ ‘||v_sal||‘ ‘||v_date); */ select ename||‘ ‘||job||‘ ‘||sal||‘ ‘||hiredate into v_info from scott.emp where ename=‘KING‘; dbms_output.put_line(v_info); end; /
需要定义变量,然后into到变量中。可以定义几个变量,也可以把列用||连接,作为一个字符串into到一个变量中。
来源于环境或宿主语言如C,java。SQLPLUS里可以使用绑定变量来接收PL/SQL块的返回值。
绑定变量使用方式:
var g_message VARCHAR2(30); begin :g_message := ‘My First PL/SQL Block!‘; end; / --在SQLPUS中用print命令可以显示绑定变量的值 print g_message
由原来的普通标准变量存一个单行单列的值,增强到了存单行多列的值。
先定义数组的类型,再将类型赋予变量,变量就变成了数组 (后面的record和plsql_table同理)。
declare type no_list is varray(10) of number; --varray(10)表示数组个数为10,number表示存储数字类型 x no_list :=no_list(1990,2010,1995); begin dbms_output.put_line(‘no_list 1 is:‘||x(1)); dbms_output.put_line(‘no_list 2 is:‘||x(2)); dbms_output.put_line(‘no_list 3 is:‘||x(3)); end; /
使用方法:
引用record类型中的值:记录名.内部列名
举例:声明一个变量用来保存emp表的部分列的数据。
declare --第一个变量声明 v_sal number(7,2); --第二个变量声明 TYPE emp_record_type IS RECORD (ename VARCHAR2(25), job VARCHAR2(10), sal NUMBER(7,2)); emp_record emp_record_type; begin emp_record.ename := ‘Alvin‘; emp_record.job := ‘clerk‘; emp_record.sal := 1000; dbms_output.put_line(emp_record.ename||‘ ‘||emp_record.job||‘ ‘||emp_record.sal); end; /
类似于数组,但下标除了定义成数字外还可以定义为字符,定义成数值型下标时必须使用binary_integer类型。
binary_integer类型相比number类型区别:
使用方法:
举例:
declare type emp_table_type is table of varchar2(20) index by binary_integer; emp_table emp_table_type; begin emp_table(0) :=‘Alex‘; emp_table(-1) :=‘X1‘; emp_table(2) :=‘hello‘; dbms_output.put_line(‘index 0 : ‘||emp_table(0)); dbms_output.put_line(‘index -1 : ‘||emp_table(-1)); dbms_output.put_line(‘index 2 : ‘||emp_table(2)); end; /
特殊关键字引用方法:
declare type emp_table_type is table of varchar2(10) index by varchar2(10); emp_table emp_table_type; begin emp_table(‘A‘) := ‘KING‘; emp_table(‘B‘) := ‘zjz‘; dbms_output.put_line(‘PL/SQL table elements numbers : ‘||emp_table.count); dbms_output.put_line(‘The first element index --> ‘||emp_table.first); dbms_output.put_line(‘The last element index --> ‘||emp_table.last); dbms_output.put_line(‘The index ‘‘B‘‘ prior element is --> ‘||emp_table.prior(‘B‘)); dbms_output.put_line(‘The index ‘‘A‘‘ next element is --> ‘||emp_table.next(‘A‘)); end; /
PL/SQL中不能直接使用select 需要使用select into 将查询结果插入到标量 再dbms_output打印标量
使用方法:
引用方法:
declare TYPE emp_record_type IS RECORD (ename VARCHAR2(25), job VARCHAR2(10), sal NUMBER(7,2)); type emp_table_type is table of emp_record_type index by binary_integer; emp_table emp_table_type; begin select ename,job,sal bulk collect into emp_table from scott.emp; for i in emp_table.FIRST..emp_table.LAST loop dbms_output.put_line(‘index‘|| i ||‘ : ‘||emp_table(i).ename); end loop; end; /
参照变量是指用于存放数值指针的变量。通过使用参照变量,可以使得应用程序共享相同对象,从而降低占用的空间。在编写pl/sql程序时,可以使用游标变量(ref cursor)和对象类型变量(ref obj_type)两种参照变量类型。
使用游标时,当定义游标时不需要或不能指定相应的select语句,但是当使用游标时(open 时)需要指定select语句,这样一个游标与一个select语句结合了。实例如下:
SET serveroutput ON; DECLARE --定义游标 TYPE sp_emp_cursor IS REF CURSOR; --定义一个游标变量 sp sp_emp_cursor; --定义变量 v_ename emp.ename%TYPE; v_sal emp.sal%TYPE; BEGIN OPEN sp FOR SELECT e.ename, e.sal FROM emp e WHERE e.deptno=10; --方法一 loop循环 /* LOOP FETCH sp INTO v_ename, v_sal; EXIT WHEN sp%NOTFOUND; DBMS_OUTPUT.PUT_LINE(‘名字:‘ || V_ENAME || ‘ 工资:‘ || V_SAL); END LOOP;*/ --方法二 while循环 /* WHILE 1=1 LOOP FETCH sp INTO v_ename, v_sal; EXIT WHEN sp%NOTFOUND; DBMS_OUTPUT.PUT_LINE(‘名字:‘ || V_ENAME || ‘ 工资:‘ || V_SAL); END LOOP;*/ END; /
标签:数据 atl boolean 之间 字符串 where constant oca mes
原文地址:https://www.cnblogs.com/marxist/p/12169242.html