我有一个表(Oracle 11g),其中多个包/存储过程运行DML语句.我想捕获使用触发器在表上发出DML的包/过程名称,并将其记录到日志记录表中.
例如:
包MY_PACK.MY_PROC()发出insert into...表格mytab.我会设计一个触发器,mytab它应该能够捕获发出的包/过程名称insert into..并将此信息存储在另一个表中my_tab_log.
我做了一些搜索并发现$$PLSQL_UNIT并且$$PLSQL_LINE可以指出过程名称,但是如果在触发器中使用这些变量,则将捕获触发器名称而不是发出DML语句的包/过程名称.
喜欢 -
CREATE OR REPLACE TRIGGER my_trg
AFTER INSERT OR UPDATE OR DELETE
ON MY_TAB
FOR EACH ROW
BEGIN
IF INSERTING THEN
insert into my_tab_log values('INSERTED A ROW'
sysdate,
$$PLSQL_UNIT);
END IF;
-- This would capture Trigger name but I would like to capture `MY_PACK.MY_PROC()`
-- which issued the insert statement
...
END;
Run Code Online (Sandbox Code Playgroud)
现在,因为$$ PLSQL_UNIT是一个条件编译指令.在编译/重新编译PL/SQL代码时解决了这个问题.所以不幸的是,触发器中的$$ PLSQL_UNIT只是触发器名称,并在触发器编译时解析.
我也找到了这个程序, …
CREATE OR REPLACE FUNCTION get_status_by_member_id
(p_member_id NUMBER)
RETURN CHAR
AS
v_status CHAR(1);
BEGIN
select status
into v_status
from members
where member_id = p_member_id;
if v_status is null then
return v_status || 'N';
else
return v_status;
end if;
END get_status_by_member_id;
Run Code Online (Sandbox Code Playgroud) 我通常会SQL在Bash shell脚本中内联编写语句,以便在SQLPlusas-中执行
#! /bin/sh
sqlplus user/pwd@dbname<<EOF
insert into dummy1
select * from dummy2;
commit;
exit;
EOF
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,并dummy1在执行时插入行.我的一位同事前几天来找我,脚本如下(简化)
#! /bin/sh
sqlvar="insert into dummy1 select * from dummy2;commit;"
echo $sqlvar|sqlplus user/pwd@dbname
Run Code Online (Sandbox Code Playgroud)
这个问题是在执行变量时将变量sqlvar扩展*为当前目录中的所有文件,最终会出错 - 如
SQL> insert into dummy1 select <--all the file names in the current directory-->
from dummy2;commit
*
ERROR at line 1:
ORA-00923: FROM keyword not found where expected
Run Code Online (Sandbox Code Playgroud)
我们对这一个的第一个立场是shell *在通配符上下文中解释并列出所有文件名,而shell变量扩展(不太确定为什么...... ???).所以,为了理解这一点,我们做了类似下面的事情 -
$ var="hello *"
$ echo $var …Run Code Online (Sandbox Code Playgroud) 我已经做了一些谷歌搜索,但找不到任何相关信息.log4j支持一堆日志appenders,还有文档各地有关网络ConsoleAppender和FileAppender,但也有关于追加程序,例如很少或没有的信息NullAppender,JDBCAppender等等.我对特别感兴趣NullAppender.
<appender name="???" class="org.apache.log4j.varia.NullAppender">
<appender name="???" class="org.apache.log4j.jdbc.JDBCAppender">
Run Code Online (Sandbox Code Playgroud)
有没有人对这些有任何具体信息?特别是在NullAppender?
我开始在这里看.
我需要帮助.我在构建PL/SQL块时遇到问题.在游标中,我构建了一个查询,我想在游标上插入一个过滤器.以下是一个例子:
DECLARE
code NUMBER;
parameters_amb myOthertable%ROWTYPE;
CURSOR test is SELECT id from mytable
if parameters_amb.test2 is not null then
where mytable.name = 'NAMETABLE'
else
where mytable.name = 'NAMETABLE2';
Run Code Online (Sandbox Code Playgroud)
谁能协助我进行这种建设?
我在BI Publisher中有一个类似XML的XML-
<ROW1>
<TOTAL_RETAIL>10.95</TOTAL_RETAIL>
<TOTAL_TAX> 1.8</TOTAL_TAX>
<TOTAL_SHIPPING>7.95</TOTAL_SHIPPING>
</ROW1>
Run Code Online (Sandbox Code Playgroud)
<ROW1>不重复.现在,我的理解做了SUM我可以使用XPath功能的节点的sum()喜欢<?sum(.//TOTAL_RETAIL)?>.这将总结该节点的值TOTAL_RETAIL而已,我想的总和TOTAL_RETAIL,TOTAL_TAX和TOTAL_SHIPPING.有没有办法可以编写sum实现此功能的函数.
注意 - 它不能以编程方式处理,即使用变量等,因为它在报告模板中,并且必须定义<?sum(...)?>为此值将映射到Excel报告模板中的特定单元格.