博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PL SQL笔记(三)
阅读量:4631 次
发布时间:2019-06-09

本文共 5860 字,大约阅读时间需要 19 分钟。

loop  if credit_rating < 3 then    ..    exit;  end if;end loop;

 

select to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') from dual;select cast(sysdate as timestamp) from dual;

复合类型数据

1.记录:

declare  type    emp_record_type  is record  (    r_name emp.ename%type,    r_job emp.job%type  );  emp_record emp_record_type;begin  select t.ename, t.job into emp_record from emp t where t.empno = '7369';  dbms_output.put_line('ename = ' || emp_record.r_name || ', r_job = ' || emp_record.r_job);end;/

2.联合数组:

declare  type    emp_table_type  is table of    emp.ename%type  index by binary_integer;  emp_table emp_table_type;begin  select ename into emp_table(0) from emp where empno = '7369';  dbms_output.put_line('ename = ' || emp_table(0));end;/

3.嵌套表:

嵌套表和联合数组类似,但嵌套表可以作为列的数据类型使用,而联合数组不能。

create or replace type item_type as object(  t_username varchar2(20),  t_password varchar2(20),  t_age smallint);declare  type itemtable is table of item_type;  v_table itemtable := itemtable();begin  v_table.extend;  v_table(v_table.last) := item_type('dys', 'dys123', 10);end;

利用嵌套表当表列数据类型:

create or replace type itemtable is table of Item_Type;create table TestTable(  address varchar2(100),  phoneNumber varchar2(11),  itemList itemtable)nested table itemList store as itemList;

4.变长数组:

变长数组可以作为表列的数据类型或对象类型属性的数据类型,嵌套表长度没有限制,而变长数组长度有限制:

create or replace type idArray_Type as varray(100) of number;create or replace type item_type as object(  v_itemCode char(10),  v_name varchar2(20));create or replace type itemArray as varray(10) of item_type;create table TestT(  v_id number(8),  items itemArray)

pl sql 基本结构:

declare  v_id number(8) := 10;  v_username varchar2(20);begin  delete from A;  insert into A values(v_id, 'ding', 'ding123');  select username into v_username from A where id = v_id;  dbms_output.put_line('v_username = ' || v_username);  exception    when no_data_found then      dbms_output.put_line('no data');end;/

常量:

declare  PI constant number(9) := 3.1415926;begin  commit;end;

变量:

declare  age number(3) := 26;begin  commit;end;

其他类型:

emp.empno%typeemp%rowtype

分支:

if ... then

if sales > 10 then  compute_bonus(empid);  update payroll set pay = pay + bonus where empno = emp_id;end if;

if .. then ... else

if trans_type = 'CR' then  update accounts set balance = balance + debit where ...else  update accounts set balance = balance - debit wehre ...end if;
if trans_type = 'CR' then  update accounts set balance = balance - debit where ...else  if new_balance >= minimum_balance then     update accounts set balance = balance - debit where ...  else      raise insufficient_funds;  end if;end if;

if .. then ...elsif

begin  if sales > 50000 then     bonus := 1500;  elsif sales > 35000 then     bonus := 500;  else     bonus := 100;  end if;  insert into payroll values(emp_id, bonus...);end;

case语句:

case grade  when 'A' then     dbms_output.put_line('A');  when 'B' then     dbms_output.put_line('B');  else     dbms_output_put_line('wrong!');end case;

搜寻式case语句:

case  when grade = 'A' then     dbms_output.put_line('A');  when grade = 'B' then    dbms_output.put_line('B');  else    dbms_output.put_line(''wrong!);end case;

loop

loop  ....end loop;

exit(只能入到循环中,如果普通PL SQL 块要退出用return)

loop   if a > 3 then     ...     exit;   end if;end loop;

exit .. when

loop  fetch c1 into ...  exit  when c1%notfound;  ...end loop;close c1;

if == exit ... when

if a > 100 then   exit;end if;-----------------------------------------------------------exit when a > 100;

loop label(循环标签)

<
>loop ... loop ... exit outer when ... end loop;end loop outer;

while ... loop

while a < 100 loop  ...  select sal into salary from emp where x = x;  ...  total := total + salary;end loop;

其他用法:

loop   ...   exit when a > 10;end loop;--------------------------------------------do{} while()---------------------------------------------done := false;while not done loop  .... done := boolean_expression;end loop;

for ... loop

declare   type datelist is table of date index by binary_integer;   dates datelist;   k constant integer := 5;begin   for j in 1 .. 3 loop       dates(j * k) := sysdate;   end loop;end;
select count(empno) into emp_count from emp;for i in 1 .. emp_count loop   ...end loop;-----------------------------------------------------------<
>declare ctr integer;begin ... for ctr in 1 .. 25 loop ... if main.ctr > 10 then ... end if; end loop;end main;

for exit

for j in 1 .. 10 loop   fetch cl into emp_rec;     exit when cl%notfound;   ...end loop;-------------------------------------------------<
>for i in 1 .. 5 loop ... for j in 1 .. 10 loop fetch cl into emp_rec; exit outer when cl%notfound; ... end loop;end loop outer;

goto

declare   done boolean;   for i in 1 .. 10 loop      if done then         goto end_loop;      end if;      ...     <
> null; end loop;endl;
declare   my_ename char(10);begin   <
> select ename into my_ename from emp wher ... begin ... goto get_name; end;end;

null

exception   when zero_divide then      rollback;   when value_error then      insert into errors values...   when others then     null;
if rating > 90 then   compute_bonus(emp_id);else   nullend if;

 DCL(数据控制语句)

权限 说明
create user 创建其他用户(dba角色)
drop user 删除其他用户
select any table 查询任何用户表或视图
create any table 在任何表空间中创建表
drop any table 删除在任何表空间中所创建的表
create session 连接数据库
create table 在用户自己表空间中创建表
create view 在用户自己表空间中创建视图
create sequence 在用户自己的表空间中创建序列
create proceudre 在用业内自己表空间中创建存储过程

授权:

grant create any table to scott;

撤销授权:

revoke create any table from scott;

保存点:

savepoint a;

execute dbms_transaction.savepoint('B');

回滚保存点:

rollback to B;

exeucte dbms_transaction.rollback_savepoint('A');

回滚全部事物:

rollback;

execute dbms_transaction.rollback;

转载于:https://www.cnblogs.com/dingyingsi/p/3246587.html

你可能感兴趣的文章
[Bada开发]API官方学习2-风格
查看>>
Ruby: 获取IE的一些信息(其实应用AutoIt脚本本身,获取这些信息更加简单)
查看>>
微信小程序之动态获取元素宽高
查看>>
request.setAttribute
查看>>
HDU 1281 二分图
查看>>
CF2.C
查看>>
NYOJ 832 DP
查看>>
Beta版本发布
查看>>
表单提交验证方法
查看>>
JS框架设计读书笔记之-核心模块
查看>>
实验二
查看>>
bind(),call(), apply()方法的区别是什么?
查看>>
android--开机启动--在某些机型上开机不能启动的问题
查看>>
通过 Storyboard 快速搭建一系列连贯性的视图控制器
查看>>
2-3 Sass的函数功能-列表函数
查看>>
更改oracle字符集 error: ora-12712 解决方法
查看>>
mysql 报错 ERROR 1101 (42000): BLOB/TEXT column can’t have a default value
查看>>
JAVA设计模式-工厂模式(代码示例)
查看>>
根据会计期间获取月度第一天,最后一天和年度第一天
查看>>
PostgreSQL安装日志
查看>>