参考链接
oracle之存储过程、函数、包
存储过程(procedure)
格式
create or replace procedure procedure_name(Name in out type, Name in out type, ...) is
begin
end procedure_name;
示例
--自动创建表格,并update数据
--dbms_output.put_line()需要先在command(命令行界面)“set serverout on ”打开输出
create or replace procedure update_qylxid_of_null_for_rygx
Authid Current_User
is
v_date varchar2(8);--定义日期变量
v_sql varchar2(2000);--定义动态sql
v_tablename varchar2(20);--定义动态表名
begin
select to_char(sysdate,'yyyymmdd') into v_date from dual;--取日期变量
v_tablename := 'T_'||v_date;--为动态表命名
v_sql := 'create table '||v_tablename||'as select*from t_qy';--为动态sql赋值
dbms_output.put_line(v_sql);--打印sql语句
execute immediate v_sql;--执行动态sql
v_sql:='update t_qy t set t.LXID=(select LXID from t_qy_qy lx where lx.bh=t.bh and lx.LX =t.dm) where t.lxid is null';
dbms_output.put_line(v_sql);--打印sql语句
execute immediate v_sql;--执行动态sql
end update_qylxid_of_null_for_rygx;
常见问题
ORACLE执行存储过程权限不足
--需要增加Authid Current_User
--AUTHID DEFINER (定义者权限):指编译存储对象的所有者。也是默认权限模式。
--AUTHID CURRENT_USER(调用者权限):指拥有当前会话权限的模式,这可能和当前登录用户相同或不同(alter session set current_schema 可以改变调用者Schema)
create or replace PROCEDURE 存储过程名称
Authid Current_User
IS
BEGIN
……;
END;