Oracle编程脚本记录

--命令窗口查询
exec 存储名、包名、视图;
select 函数名 from dual;


create or replace procedure PR_test is
begin
--存储过程的代码
Dbms_Output.put_line('这是输出的一句话');
--serveroutput 系统设置项 是否在命令窗口打开 默认是 off,
--set serveroutput on; 打开系统输出为on
--只针对当前命令窗口有效
end PR_test;


--带参数存放
create or replace procedure pr_test01(sno in varchar2,cno in varchar2,degree in number,msg out varchar2) is
begin
--数据插入
insert into score values(sno,cno,degree);
commit;
Dbms_Output.put_line('插入成功');
degree:=1;      --代表执行成功
--给变量赋值
msg:='执行成功';
end pr_test01;



create or replace procedure PR_test02 is
--定义变量
msgl varchar2(100)
begin
--调用其他存储过程
pr_test01('103','3-204',98,msgl);
Dbms_Output.put_line(msgl);
end pr_test02



--条件判断
create or replace procedure PR_test02 is
--定义变量
msgl varchar2(100);
deg number(4,2):=0;
begin
deg:=98;
--调用其他存储过程
pr_test01('103','3-204',deg,msgl);
Dbms_Output.put_line(msgl);
Dbms_Output.put_line(deg);
--条件判断
if(deg=1)then
Dbms_Output.put_line('deg=1 代表执行成功');
else
Dbms_Output.put_line('deg!=1 代表执行失败');
end if;
end pr_test02;



--自定义函数
--自定义必须要有返回值
create or replace function pr_fun(tablename in varchar2) return  number is
  rtn number :=0 ;
begin
 --获取学生表的记录条数
 select count(1) into rtn from student s;
 dbms_output.put_line('记录条数 rtn='||rtn);
 --不能执行数据修改
 --动态SQL语句
 EXECUTE IMMEDIATE'select count(1) into rtn from '||tablename into rtn;            --into 是把查询语句的结果赋值给变量
'insert into student value (:1,:2)'using;            --using只能使用在into后面,并且针对DML使用,using 是把变量的值传入语句中对应的:1,:2....
return(rtn);
exception when others then        --异常处理,放在最后的语句
dbms_output.put_line('发生异常')
end pr_fun;



--
--包体
create or replace package body pg_test is

 --包体:存放程序,私有的
 --定义存储过程
procedure PR_test is
begin 
--存储过程的代码
Dbms_Output.put_line('这是输出的一句话');
--修改数据
update student set ssex='1' where ssex='';
commit;--提交数据修改
Dbms_Output.put_line('测试包的存储过程');
end PR_test;
end pg_test;



--触发器源码
create or replace trigger tg_test
  after insert or update or delete
  on STUDENT                             --每次对student进行增加,修改,删除便会触发记录日志的程序
  for each row
declare
  -- 定义变量
msg varchar2(200);
begin
  --触发代码
  msg:='触发器';
  
  --记录日志的程序
  --判断操作类型
  case
    when inserting then
  insert into log values (sq_log.nextval,'student',sysdate,'对表进行添加数据 新数据主键= '||:new.sno);
   when updating then
  insert into log values (sq_log.nextval,'student',sysdate,'对表进行修改数据 新数据主键='||:old.sno);
   when deleting then
  insert into log values (sq_log.nextval,'student',sysdate,'对表进行删除数据 新数据主键='||:old.sno);
  end case;
end tg_test;
原文地址:https://www.cnblogs.com/tfl-511/p/5976967.html