时间:2021-07-01 10:21:17 帮助过:17人阅读
1 declare 2 v_temp number(6):=123; /* := 是一个赋值符号 */ 3 begin 4 dbms_output.put_line(‘middle‘); 5 dbms_output.put_line(v_temp); 6 end;
要想显示程序的东西需要设置环境
set serveroutput off -->关闭输出(默认关闭) set serveroutput on -->打开输出
%rowtype 与表结构完全一致 %rowtype 举例:
1 declare 2 v_tt emp%rowtype; 3 begin 4 select * into v_tt from emp where empno=7521; 5 dbms_output.put_line(v_tt.job); 6 dbms_output.put_line(v_tt.sal); 7 end; 8 9 输出:SALESMAN 10 1250
TYPE VARRAYNAMEIS VARRAY(SIZE) OF ELEMENTTYPE [NOT NULL];
其中,varrayname是VARRAY数据类型的名称,size是正整数,表示可以容纳的成员的最大数量,每个成员的数据类型是elementtypeo默认时,成员可以取空值,否则需要使用NOT NULL加以限制。
数组是具有相同数据类型的一组成员的集合。每个成员都有一个唯一的下标,它取决于成员在数组中的位置。在PL/SQL中,数组数据类型是VARRAY(variable array,即可变数组)。
1 declare 2 type my_varray is varray(2) of varchar2(12) not null; 3 varray_my my_varray; 4 begin 5 varray_my:=my_varray(‘dsa‘,‘sdafds‘); 6 dbms_output.put_line(varray_my(1)); 7 end;
如果初始化数量大于设定的大小,会报下标超出限制异常
如果初始化数量小于设定的大小,会按照初始化数量进行设定大小,访问不存在数据的下标(即使在设定范围内).也会报异常
1 DECLARE 2 --定义一个最多保存5个VARCHAR(25)数据类型成员的VARRAY数据类型 3 TYPE reg_varray_type IS VARRAY(5) OF VARCHAR(25); 4 --声明一个该VARRAY数据类型的变量 5 v_reg_varray REG_VARRAY_TYPE; 6 BEGIN 7 --用构造函数语法赋予初值 8 v_reg_varray := reg_varray_type 9 (‘中国‘, ‘美国‘, ‘英国‘, ‘日本‘, ‘法国‘); 10 DBMS_OUTPUT.PUT_LINE(‘地区名称:‘||v_reg_varray(1)||‘、‘ 11 ||v_reg_varray(2)||‘、‘ 12 ||v_reg_varray(3)||‘、‘ 13 ||v_reg_varray(4)); 14 DBMS_OUTPUT.PUT_LINE(‘赋予初值NULL的第5个成员的值:‘||v_reg_varray(5)); 15 --用构造函数语法赋予初值后就可以这样对成员赋值 16 v_reg_varray(5) := ‘法国‘; 17 DBMS_OUTPUT.PUT_LINE(‘第5个成员的值:‘||v_reg_varray(5)); 18 END;
TYPE TABLE NAME IS TABLE OF ELEMENT_TYPE [NOT NULL] INDEX BY [BINARYINTEGER|LSINTEGER|VARRAY2];
而如果没有这句话“INDEXBY BINARY_INTEGER”,那就得要显示对初始化,且每插入一个元素到NUMBERS类型的TABLE中时,都需要先EXTEND。
1 --table 不能像varray一样初始化数据,只能一个一个赋值 2 declare 3 type table_my is table of number not null index by binary_integer;-- by binary_integer表示创建一个主键索引,以便引用记录表变量中的特定行。 4 my_table table_my; 5 begin 6 my_table(1):=23; 7 my_table(2):=24; 8 my_table(3):=24; 9 dbms_output.put_line(my_table(1)); 10 end; 11 12 结果: 23 13 14 15 ---table结合rowtype的使用 16 declare 17 type table_my is table of emp%rowtype index by binary_integer; 18 19 my_table table_my; 20 begin 21 select * BULK COLLECT into my_table from emp ; 22 for i in my_table.first..my_table.last loop 23 dbms_output.put_line(my_table(i).empno||‘==‘||my_table(i).ename||‘==‘||my_table(i).job); 24 end loop; 25 end; 26 27 结果:1357==oracle== 28 7369==SMITH==CLERK 29 7499==ALLEN==SALESMAN 30 ...
TYPE RECORDNAME IS RECORD(
V1 DATATYPE1 [NOT NULL][:=DEFAULTVALUE],
V2 DATATYPE2 [NOT NULL][:=DEFAULTVALUE],
VN DATATYPEN [NOT NULL][:=DEFAULT_VALUE]
);
1 ---record实现多列多行查询 2 declare 3 type my_record is record( 4 v_empno emp.empno%type, 5 v_ename emp.ename%type, 6 v_job emp.job%type 7 ); 8 type my_table is table of my_record index by binary_integer; 9 table_my my_table; 10 begin 11 select empno,ename,job BULK COLLECT into table_my from emp ; 12 for i in table_my.first..table_my.last loop 13 dbms_output.put_line(table_my(i).v_empno||‘==‘||table_my(i).v_ename||‘==‘||table_my(i).v_job); 14 end loop; 15 end; 16 结果同上一个table
语法格式
select 字段 into 变量 from 表 where 条件
语法格式
EXCEPTION
WHEN firstexception THEN code to handle first exception
WHEN secondexception THEN code to handle second exception
WHEN OTHERS THEN code to handle others exception
END;
自定义异常:
1 declare 2 v_exception exception; 3 v_sal emp.sal%type; 4 begin 5 select sal into v_sal from emp where empno=7521; 6 if v_sal>1000 then 7 raise v_exception; 8 else 9 dbms_output.put_line(‘还可以‘); 10 end if; 11 exception 12 when v_exception then 13 dbms_output.put_line(‘钱太少啦‘); 14 end; 15 16 结果:钱太少啦
自定义错误----------------
1 declare 2 v_sal emp.sal%type; 3 begin 4 select sal into v_sal from emp where empno=7521; 5 if v_sal>1000 then 6 raise_application_error(‘-20000‘,‘工资太低啦‘); 7 else 8 dbms_output.put_line(v_sal); 9 end if; 10 11 end; 12 结果:会弹出弹出框错误
- 直接使用
- DML语句起作用或者回退的话,需要显式的调用commit或者rollback
- sql%rowcount属性来记录最后一条SQL语句影响了多少 条记录
1 declare 2 v_empno emp.empno%type:=&s_empno; 3 begin 4 insert into emp(empno,ename) values(v_empno,‘张三‘); 5 if v_empno>4 then 6 rollback; 7 raise_application_error(‘-20000‘,‘不能这样插滴~~‘); 8 end if; 9 end; 10 结果弹出错误.
1 ----1--- 2 declare 3 v_sql varchar2(122):=‘insert into emp(empno,ename) values(:a,:b)‘; 4 begin 5 execute immediate v_sql using 111,‘shfdk‘; 6 commit; 7 end; 8 9 ----2----- 10 declare 11 v_sql varchar2(122) := ‘select ename from emp where sal=:a‘; 12 v_name emp.ename%type; 13 begin 14 execute immediate v_sql 15 into v_name 16 using 800; 17 dbms_output.put_line(v_name); 18 end;
1 打印偶数 2 declare 3 v_num number(3, 0) := 0; 4 begin 5 loop 6 dbms_output.put_line(v_num); 7 v_num := v_num + 2; 8 exit when v_num = 100; 9 end loop; 10 end;
1 打印乘法口诀表 2 begin 3 for i in 1..9 loop 4 for j in 1..i loop 5 dbms_output.put(j||‘*‘||i||‘=‘||(i*j)||chr(9)); 6 if i=j then dbms_output.new_line(); 7 end if; 8 end loop; 9 end loop; 10 end;
PLSQL语法
标签:参数 sql语句 最大 als into others 构造 date 乘法口诀