我的问题是下面详述的触发器似乎正确执行,除了更新语句 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) ORDER BYoracle中子句的默认排序类型是否有任何差异?
我知道ASC如果我DESC在10克订购后立即放弃.
11g是一样的吗?
我想用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) 我创建了一个如下的过程
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的表仍将存在.改为大写没有区别.我想这个变量根本就没有替代......关于如何修复它的任何想法?
该表包含城市及其分支/自动取款机的数据
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)
我们是否可以在一个选择语句中执行此操作.
我有一个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错误?
我在运行一个程序时遇到了一个奇怪的问题.
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.
现在我怎么能解决我的问题,它没有我最近添加的两个值,它运作良好.
我试过的,我已经分析了表并重建索引,但仍然没有运气.请帮助我
我有一个包,我正在调用一个过程来向表中插入记录,我调用此过程两次,间隔为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)
给我编译错误错误的参数数量调用提交.
我该如何解决这个问题?
我有一个名为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 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运行时?
plsql ×10
oracle ×9
oracle10g ×2
oracle11g ×2
triggers ×2
c# ×1
duplicates ×1
eclipselink ×1
glassfish-4 ×1
java ×1
jsp ×1
sql ×1
sql-order-by ×1
xpath ×1