1117-01 变量,流程控制语句,子程序中的DML,DDL,TCL语句,子程序中的数据类型
变量:
绑定变量 variable,绑定常量 define
局部变量
参数变量
循环计数变量
赋值语句
1.赋值符 :=
2.select into语句
流程控制语句
1.顺序
2.分支
if <expression> then
<body>
end if;
if <expression> then
<body>
else
<body>
end if;
if <expression> then
<body>
elsif
<body>
end if;
3.循环
--当型
loop
exit when <expression>;
<body>
end loop;
--直到型
loop
<body>
exit when <expression>;
end loop;
--其他
loop
<body1>
exit when <expression>;
<body2>
end loop;
说明:其他这种写法,很适合游标的fetch
例子:
set serveroutput on;
declare
vi_num integer := 1;
vi_sum integer default 0;
begin
loop
exit when vi_num > 100;
vi_sum := vi_sum + vi_num;
vi_num := vi_num + 1;
end loop;
dbms_output.put_line('vi_num='||vi_num||',vi_sum='||vi_sum);
end;
/
--当型
while <expression> loop
<body>
end loop;
for <variable> in <value1> .. <value2>|<cursor>|<select语句>
loop
<body>
end loop;
查询语句
1.静态语句
select into <var> from <结果集>
2.动态语句
execute immediate <vv_sql> into <var>;
例子:
declare
vv_sql varchar2(1000);
vv_brand_code varchar2(30);
vv_brand_name varchar2(30);
begin
vv_brand_code := 'B01'; --变量vv_brand_code的赋值 必须在 vv_sql赋值之前
vv_sqp := 'select brand_name from td_brand where brand_code=upper('||''''||vv_brand_code||''''||')';
execute immediate vv_sql into vv_brand_name;
exception
when others then
dbms_output.put_line(sqlcode||','||substr(sqlerrm,1,200)||',vv_sql='||vv_sql);
end;
/
DML语句:insert,update,delete
1.静态语句
2.动态语句
execute immediate <str_variable>;
TCL语句:commit,rollback
1.静态语句
2.动态语句
必须使用动态语句的场景:
1.DML语句
2.表名,字段名 是 使用变量拼接得到的
注意:动态语句的sql不能以;结尾,否则报错。
子程序中的数据类型
1.基本数据类型
2.列类型,行类型
<table>.<column>%type
<table>%rowtype
<cursor>%rowtype
3.exception
4.cursor
6.复合类型:记录 和 集合