sql - 过程执行表
问题描述
我有这个程序:
create or replace procedure tst
begin
execute immediate 'create table tb1 select 1 col from dual';
execute immediate 'create table tb2 select 1 col from dual';
insert into tb3 select 1 from dual;
execute immediate 'truncate table tb3';
--error table not specified
execute immediate 'create table tb4 select 1 col from ';
execute immediate 'truncate table tb4';
end;
我需要创建一个表并将程序内部执行的所有操作都输入其中。与此类似的东西:
"txt" "dt" "name procedure"
procedure started 20.09.2021 15:12:11 tst
table tb1 created 20.09.2021 15:12:11 tst
table tb2 created 20.09.2021 15:12:12 tst
insert into tb3 20.09.2021 15:12:14 tst
truncate tab3 20.09.2021 15:12:16 tst
error table not specified 20.09.2021 15:12:16 tst
谢谢!
解决方案
您可以创建这样的表
CREATE TABLE log_ops( txt VARCHAR2(400), dt DATE, proc_name VARCHAR2(40) );
和具有嵌套过程的过程以记录相关步骤,例如
CREATE OR REPLACE PROCEDURE tst AS
v_ddl VARCHAR2(150);
v_prc VARCHAR2(40) := $$PLSQL_UNIT;
PROCEDURE pr_ins(i_txt VARCHAR2) IS
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
INSERT INTO log_ops VALUES(i_txt,SYSDATE,v_prc);
COMMIT;
END;
BEGIN
pr_ins('procedure started');
v_ddl := 'CREATE TABLE tb1 SELECT 1 col FROM dual';
EXECUTE IMMEDIATE v_ddl;
pr_ins('table tb1 created');
v_ddl := 'CREATE TABLE tb2 SELECT 1 col FROM dual';
EXECUTE IMMEDIATE v_ddl;
pr_ins('table tb2 created');
INSERT INTO tb3 SELECT 1 FROM dual;
pr_ins('insert into tb3');
v_ddl := 'TRUNCATE TABLE tb3';
EXECUTE IMMEDIATE v_ddl;
pr_ins('truncate tab3');
v_ddl := 'CREATE TABLE tb4 SELECT 1 col FROM...';
EXECUTE IMMEDIATE v_ddl;
pr_ins('error table not specified');
v_ddl := 'TRUNCATE TABLE tb4';
EXECUTE IMMEDIATE v_ddl;
pr_ins('truncate tab4');
EXCEPTION WHEN others THEN pr_ins('error : '||sqlerrm);
END;
推荐阅读
- javascript - 如何使用 keyup 函数删除 div 类?
- flask - jinja2 中的范围和 url_for
- angular - 基于全局变量的动态路由
- powerbi - 《COUNTIFS》我们在 Power BI 中是否也有类似的乐趣
- r - rmarkdown中的数据表交叉标签
- sql - 我有 AWS API 网关,它通过主体映射模板与 lambda 函数集成
- powerbi - 带有“,”的货币数据类型
- ionic-framework - Ionic 4 嵌套选项卡
- nativescript-vue - 网格布局中的非活动按钮 - Nativescript-vue
- python - Pandas - zfill 混合列中的仅数值