小编Ann*_*awn的帖子

从触发器捕获包/过程/函数名称

我有一个表(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只是触发器名称,并在触发器编译时解析.

我也找到了这个程序, …

oracle triggers plsql stored-procedures

4
推荐指数
1
解决办法
1万
查看次数

Oracle SQL:为什么我的函数输出null?

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 oracle plsql

3
推荐指数
1
解决办法
2082
查看次数

bash shell脚本中的"set -o noglob"

我通常会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)

bash shell sqlplus inline

2
推荐指数
2
解决办法
1万
查看次数

关于log4j.xml NullAppender

我已经做了一些谷歌搜索,但找不到任何相关信息.log4j支持一堆日志appenders,还有文档各地有关网络ConsoleAppenderFileAppender,但也有关于追加程序,例如很少或没有的信息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

我开始在这里看.

java logging log4j

2
推荐指数
1
解决办法
4479
查看次数

PL/SQL动态SQL

我需要帮助.我在构建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)

谁能协助我进行这种建设?

oracle conditional plsql cursor

2
推荐指数
1
解决办法
761
查看次数

SUM()XML的不同节点

我在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_TAXTOTAL_SHIPPING.有没有办法可以编写sum实现此功能的函数.

注意 - 它不能以编程方式处理,即使用变量等,因为它在报告模板中,并且必须定义<?sum(...)?>为此值将映射到Excel报告模板中的特定单元格.

xml xslt xpath sum bi-publisher

1
推荐指数
1
解决办法
3万
查看次数