标签: plsql

触发器中的非更新列

我的问题是下面详述的触发器似乎正确执行,除了更新语句 UPDATE my_dblist SET passive_servername = v_newpassive WHERE server = :NEW.server AND dbname = :NEW.dbname;似乎没有发生的事实.旧记录将被删除并正确插入历史记录,但新记录没有在passive_servername下列出旧的活动服务器.我有一种感觉,这可能与它自治有关吗?

create or replace
TRIGGER cluster_check
AFTER INSERT ON my_dblist
FOR EACH ROW
DECLARE
pragma autonomous_transaction;
v_duplicates NUMBER;
v_newpassive varchar2(30);
BEGIN
SELECT count(*) INTO v_duplicates FROM my_dblist WHERE passive_servername         = :new.server and dbname = :new.dbname order by 1;
IF v_duplicates > 0
THEN 
SELECT server INTO v_newpassive FROM my_dblist WHERE passive_servername = :NEW.server AND dbname = :NEW.dbname ORDER BY 1;
UPDATE my_dblist
SET passive_servername = …
Run Code Online (Sandbox Code Playgroud)

sql oracle triggers plsql

0
推荐指数
1
解决办法
103
查看次数

oracle命令默认类型为desc或asc 11g vs 10g

ORDER BYoracle中子句的默认排序类型是否有任何差异?

我知道ASC如果我DESC在10克订购后立即放弃.

11g是一样的吗?

oracle plsql sql-order-by oracle10g oracle11g

0
推荐指数
1
解决办法
2107
查看次数

JPA和SYS_REFCURSOR类似于OUT参数

我想用SYS_REFCURSOR类似OUT参数的JPA调用一个过程.使用普通JDBC非常容易,但我不确定JPA是否可行.

我的程序如下:

CREATE OR REPLACE FUNCTION FN_GET_COINS
  RETURN SYS_REFCURSOR
IS vCursor SYS_REFCURSOR;

BEGIN
  OPEN vCursor FOR
    SELECT
      ...
  RETURN vCursor;
  CLOSE vCursor;

EXCEPTION
  ...
END FN_GET_COINS;
Run Code Online (Sandbox Code Playgroud)

java plsql sys-refcursor eclipselink glassfish-4

0
推荐指数
1
解决办法
9774
查看次数

变量未在程序中替换.怎么了?

我创建了一个如下的过程

CREATE OR REPLACE PROCEDURE drop_if_exists (table_name IN varchar2)
IS
BEGIN
        EXECUTE IMMEDIATE 'DROP TABLE table_name';
EXCEPTION
      WHEN OTHERS THEN
         IF SQLCODE != -942 THEN
             RAISE;
         END IF;
END;
Run Code Online (Sandbox Code Playgroud)

当我以drop_if_exists('my_table')运行它时,它表示所有内容都已成功执行,但在调用该过程后,任何名为my_table的表仍将存在.改为大写没有区别.我想这个变量根本就没有替代......关于如何修复它的任何想法?

oracle plsql

0
推荐指数
1
解决办法
169
查看次数

在Single语句中获取多个聚合

该表包含城市及其分支/自动取款机的数据

CITY        TYPE       NAME
 ----------------------------------
 agra         atm         X
 agra         branch      X1 
 delhi        atm         X2
 agra         atm         X3
 agra         atm         X4
 delhi        branch      X5
 chennai      branch      X6
Run Code Online (Sandbox Code Playgroud)

期望的结果集是

CITY     ATM   BRANCH
------------------------------------
agra       3       1 
delhi      1       1
chennai    0       1
Run Code Online (Sandbox Code Playgroud)

我们是否可以在一个选择语句中执行此操作.

oracle plsql

0
推荐指数
1
解决办法
228
查看次数

模拟ORA-3113:通信通道上的文件结束

我有一个C#Windows IIS服务器(Windows Server 2003)应用程序连接到Linux上托管的Oracle数据库(Red Hat 5.3上的10gR2).间歇性地,Oracle在通信信道错误上抛出ORA-3113:文件结束.这会在C#中搞砸OracleConnection对象.然后,任何尝试使用OracleConnection的新OracleCommands都会失败,说连接已关闭.

我已经查看了此错误生成的Oracle跟踪文件,并将问题隔离到有故障的网络硬件,并正在努力解决它.

但是,我需要使我的C#代码更加健壮,并通过关闭而不再使用该连接对象使其适当地响应此错误.在C#中捕获异常很容易,但是我无法在开发环境中重现网络问题来证明我的代码可以自行运行并清理.

try
{
  oracleCommand.ExecuteNonQuery();
}
catch(OracleException exception)
{
  if(exception.Code == 3113)
    CloseAndCleanup();
}
Run Code Online (Sandbox Code Playgroud)

当我尝试INSERT到表中时,我尝试在抛出ORA-3113的表上编写PL/SQL触发器.

CREATE OR REPLACE TRIGGER SCHEMA.TABLE
BEFORE DELETE OR INSERT OR UPDATE
ON SCHEMA.TABLE
FOR EACH ROW
DECLARE
  CONNECTION_LOST_CONTACT   EXCEPTION;
  PRAGMA EXCEPTION_INIT (CONNECTION_LOST_CONTACT, -3113);
BEGIN
  RAISE CONNECTION_LOST_CONTACT;
END;
Run Code Online (Sandbox Code Playgroud)

这会抛出正确的错误,但不会破坏C#中的OracleConnection对象.我仍然可以向OracleConnection发送命令并且它可以工作.

如何准确模拟ORA-3113错误?

c# oracle plsql

0
推荐指数
1
解决办法
3218
查看次数

Oracle错误:ORA-00600:内部错误代码,参数:[13009],[5000],[1],[17],[1],[],[],[],[],[],[] ,[] ::

我在运行一个程序时遇到了一个奇怪的问题.

Proc如下所示:

procedure abc 
IS 
CURSOR xyz_cur IS
 SELECT x
       ,y
       ,z 
 from temp 
  where y IN ('abc'.'pqr'.'def','sql','pqw') 
for update nowait;
BEGIN

open xyz_cur ;
:
:

END abc;
Run Code Online (Sandbox Code Playgroud)

现在更早的光标查询没有'sql','pqw'.我已经用这两个varchar值扩展了这个IN语句.并且表temp在列y上有一个check constaint,我也扩展了check constaints.

现在我怎么能解决我的问题,它没有我最近添加的两个值,它运作良好.

我试过的,我已经分析了表并重建索引,但仍然没有运气.请帮助我

oracle plsql oracleinternals oracle11g

0
推荐指数
1
解决办法
7770
查看次数

过程以异步方式插入记录

我有一个包,我正在调用一个过程来向表中插入记录,我调用此过程两次,间隔为2分钟使用 sys.DBMS_LOCK.sleep (<>);

我面临的问题是我的呼叫形式,它来自应用程序仍然打开,直到插入完成.

我怎样才能确保当我提交我的页面和页面时应该关闭,插入应该在后端发生某种异步调用.在数据库程序中是否有任何异步关键字来执行此类活动?

谢谢

更新

putData(empNo,EmpName);
sys.DBMS_LOCK.sleep (<>);
putData(empNo,EmpName);
Run Code Online (Sandbox Code Playgroud)

由于上述原因,我的页面一直保持到第二个程序结束.我想在第一个程序完成或用户提交页面时立即关闭页面.

更新2

DBMS_JOB.SUBMIT(ln_dummy, 'begin putData('||empNo,EmpName||'); end;');
Run Code Online (Sandbox Code Playgroud)

给我编译错误错误的参数数量调用提交.

我该如何解决这个问题?

oracle jsp plsql stored-procedures oracle10g

0
推荐指数
1
解决办法
1039
查看次数

PL/SQL触发器以防止重复

我有一个名为TBLAPPLICATION的表,它保存数据,指定个人的ID号和他们申请的作业的JobID.每个ID号可以具有无限数量的应用程序,只要JobID每次都不同,因此没有重复的应用程序.

create or replace
   TRIGGER trg_duplicateapplication BEFORE INSERT ON tblapplication FOR EACH ROW

BEGIN
   IF :NEW.studentrecordnumber_fk_nn = :OLD.studentrecordnumber_fk_nn THEN
      IF :NEW.jobid_fk_nn = :OLD.jobid_fk_nn
         THEN RAISE_APPLICATION_ERROR( -20003, 'Error: duplicate application. You have already applied for this position.');
      END IF;
   END IF;
END;
Run Code Online (Sandbox Code Playgroud)

所以上面的代码不起作用,我希望如此.有人可以突出我的错误吗?:)

oracle triggers plsql duplicates

0
推荐指数
1
解决办法
2191
查看次数

如何在Oracle XMLTable中使用带有变量的XPath?

如何在Oracle XMLTable()中使用带有类似'/ abc/[contract = $ count]/initialValue'的变量的XPath?

例如:

XMLTable('root/level1', PASSING xmlContent 
COLUMNS initial_value varchar2(100) PATH '/abc/[contract = $count]/initialValue' 
)
Run Code Online (Sandbox Code Playgroud)

如何替换/评估$ count运行时?

oracle xpath plsql

0
推荐指数
1
解决办法
8965
查看次数