--创建触发器(行级触发器)
crie ou substitua o gatilho tri_update_emp_bak
após atualização
em emp_bak
para cada linha --每更新一行 就触发一次
começar
--oracle 里面 对触发器 也提供了特殊的对象 :NOVO :OLD 来访问 更新前后的数据
dbms_output.put_line('更新后' || :NEW.sal);
dbms_output.put_line('更新前' || :OLD.sal);
se estiver atualizando então
terminar se;
se inserir
fim;
--创建触发器(行级触发器)(前置)
crie ou substitua o gatilho tri3_update_emp_bak
antes da atualização
em emp_bak
para cada linha --每更新一行 就触发一次
começar
--oracle 里面 对触发器 也提供了特殊的对象 :NOVO :OLD 来访问 更新前后的数据
dbms_output.put_line('更新后' || :NEW.sal);
dbms_output.put_line('更新前' || :OLD.sal);
fim;
selecione * de emp_bak
atualizar emp_bak definir sal = 1000 onde empno em (7788)
--创建触发器(表级触发器)
--//表级别触发器里面 不允许使用 :NOVO :VELHO 变量
crie ou substitua o gatilho tri2_update_emp_bak
após atualização
em emp_bak
começar
-- dbms_output.put_line('更新后' || :NEW.sal);
--dbms_output.put_line('更新前' || :OLD.sal);
fim;
--创建触发器(行级触发器)
crie ou substitua o gatilho tri4_update_emp_bak
após atualização do sal
em emp_bak
para cada linha --每更新一行 就触发一次
começar
--oracle 里面 对触发器 也提供了特殊的对象 :NOVO :OLD 来访问 更新前后的数据
dbms_output.put_line('更新后' || :NEW.sal);
dbms_output.put_line('更新前' || :OLD.sal);
fim;
criar tabela userinfo
(
número de ID do usuário (4) chave primária,
nome de usuário varchar2(20)
)
criar tabela addrinfo
(
addrid número (4) chave primária,
adicionar nome varchar2(20),
número de ID do usuário (4) faz referência a userinfo (userid)
)
inserir em valores userinfo (1,'李四')
inserir em valores addrinfo (1,'湖北武汉',1)
selecione * em addrinfo
excluir de userinfo onde userid =1
--级联删除
crie ou substitua o gatilho tri_userinfo_delete
antes de excluir
em informações do usuário
para cada linha
começar
excluir de addrinfo onde userid =:OLD.userid;
- inserir em
fim;
crie a tabela dept_bak como select * from dept
criar ou substituir visualizar minha visão
como
selecione a.empno,a.ename,a.sal,b.dname
de emp a junção interna dept b
em a.deptno = b.deptno
selecione * na minha visualização
atualizar myview definir sal = 1000,dname='aaaaa' onde empno = 7499
--替代触发器 用在视图上面 只能是行级的
--替代触发器 特点是 真正的操作已经 变成了一个动作而已 功能由触发器来完成
crie ou substitua o gatilho tri_myview
em vez de atualizar
na minha visão
começar
dbms_output.put_line('删除操作执行了。。。');
atualizar emp set sal = :NEW.sal onde empno = :OLD.empno;
atualizar dept set dname = :NEW.dname onde dname = :OLD.dname;
--delete de emp onde empno = :OLD.empno;
fim;
selecione * de emp;
selecione * do departamento;
atualizar emp_bak set ename ='aaaa',sal = 10000 onde empno in (7788)
--系统包
-- 产生随机数
**** **** **** ****
--dbms_random.value 0-1
--dbms_random.random Nome de usuário
selecione dbms_random.value de dual;
crie ou substitua o procedimento proc_cardno(mycardno out varchar2)
como
cartão temporário varchar2(50);
cardno varchar2(19);
começar
cartão temporário:= dbms_random.value;
cardno:=substr(tempcard,2,4)||' '||substr(tempcard,6,4)||' '||substr(tempcard,10,4)||' '||substr(tempcard,14,4);
meucartão:=cartãonão;
--dbms_output.put_line(tempcard);
-- dbms_output.put_line(cardno);
fim;
--使用UTL_FILE包读写文件
crie o diretório MY_DIR como 'd:temp';
crie o diretório MY_DIR2 como 'd:temp2';
declarar
--定义文件对象
meuarquivo utl_file.file_type;
--定义变量 用来存储每读出一行的数据
linestr varchar2(200);
começar
--打开文件
meuarquivo:= utl_file.fopen('MY_DIR','oracle.log','r');
--进行读取(循环)
laço
utl_file.get_line(meuarquivo,linestr);
dbms_output.put_line(linestr);
laço final;
exceção
quando outros então
utl_file.fclose(meuarquivo);
dbms_output.put_line('读取完毕!');
fim;
declarar
--定义文件对象
meuarquivo utl_file.file_type;
--定义变量 用来存储每读出一行的数据
linestr varchar2(200);
começar
--打开文件
meuarquivo:= utl_file.fopen('MY_DIR','oracle.log','a');
--追加数据
--utl_file.get_line(meuarquivo,linestr);
utl_file.put_line(meuarquivo,'你好,这是新的数据',true);
utl_file.fclose(meuarquivo);
exceção
quando outros então
utl_file.fclose(meuarquivo);
dbms_output.put_line('读取完毕!');
fim;
--拷贝
declarar
--定义文件对象
arquivo de origem utl_file.file_type;
arquivo de destino utl_file.file_type;
--定义变量 用来存储每读出一行的数据
linestr varchar2 (200);
começar
--打开文件
arquivo fonte:= utl_file.fopen('MY_DIR','oracle.log','r');
arquivo de destino:= utl_file.fopen('MY_DIR2','copy.txt','a');
--进行读取(循环) 并且写入到新的文件里面
laço
utl_file.get_line(arquivofonte,linestr);
utl_file.put_line(targetfile,linestr,true);
--dbms_output.put_line(linestr);
laço final;
exceção
quando outros então
utl_file.fclose(arquivofonte);
utl_file.fclose (arquivo de destino);
dbms_output.put_line('拷贝完毕!');
fim;
本文来自CSDN博客,转载请标明出处: http://blog.csdn.net/hzz1988/archive/2009/12/30/5107869.aspx