标签: plsql

PL/SQL Perfom TRIM内部的触发器

我试图触发,当插入数据时,它会修剪正在插入的数据.

这是我正在尝试..

CREATE OR REPLACE TRIGGER trig_trim
BEFORE INSERT ON triggertest
FOR EACH ROW

BEGIN
  TRIM(:new.testchar);  
END;
/
Run Code Online (Sandbox Code Playgroud)

我像这样插入

INSERT INTO triggertest (testnum, testchar) VALUES (9, ' r9 ');
Run Code Online (Sandbox Code Playgroud)

我收到这个错误......

04098. 00000 -  "trigger '%s.%s' is invalid and failed re-validation"
*Cause:    A trigger was attempted to be retrieved for execution and was
           found to be invalid.  This also means that compilation/authorization
           failed for the trigger.
*Action:   Options are to resolve the compilation/authorization errors,
           disable the trigger, or drop the trigger. …
Run Code Online (Sandbox Code Playgroud)

triggers plsql trim

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

确保在PL / SQL中仅更新一行?

我UPDATE在Oracle 11g服务器上运行的语句很长:

UPDATE Table SET Column1 = 'One' WHERE Column2 = 'Example';
UPDATE Table SET Column1 = 'Two' WHERE Column2 = 'Something';
-- ...
Run Code Online (Sandbox Code Playgroud)

我想检查每个UPDATE行是否恰好影响了一行(不为零,不超过一行),如果它没有停止执行,则引发错误并回滚所有更新。

我希望这样的语法:

UPDATE Table SET Column1 = 'One' WHERE Column2 = 'Example';
ASSERT sql%rowcount = 1;
Run Code Online (Sandbox Code Playgroud)

那似乎不存在,所以也许我应该做这样的事情:

UPDATE Table SET Column1 = 'One' WHERE Column2 = 'Example';
IF sql%rowcount != 1 THEN
  -- Do something, but what?
END IF;
Run Code Online (Sandbox Code Playgroud)

但是,我不确定在IF语句中添加什么,或者这是否是一个好方法。那么,实现这一目标的最优雅的方法是什么?

sql oracle plsql sql-update

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

PLSQL"错误游标已经打开"

我有以下代码:

DECLARE 
  f_cd fee.fee_cd%type;
  f_name fee.fee_nm%type; 
  f_new_cd fee.new_fee_cd%type;
  f_new_name fee.new_fee_nm%type;

  Cursor cur is
    SELECT Fee_cd, fee_nm, new_fee_cd, new_fee_nm FROM Fee;
BEGIN
  if cur%ISOPEN then
    close cur;
  end if;

  open cur;

  for rec in cur loop
    fetch cur INTO f_cd, f_name, f_new_cd, f_new_name;
    dbms_output.put_line ('The Fee Code ' || f_cd
                          || ' is the one you selected and it''s name is '
                          || f_name);
  end loop;

  close cur;
END;
Run Code Online (Sandbox Code Playgroud)

但我一直收到错误信息

原因: 尝试打开已打开的游标.

操作: 在重新打开之前先关闭光标.

我不知道发生了什么.当我改变代码以取消它for loop并使用loop... end loop …

oracle plsql for-loop cursor

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

Oracle:防止存储过程在生产环境之外运行

我们在Oracle生产环境中有一个计划任务,它运行一个存储过程来在dev和prod中的相同模式之间复制数据.(这是解决业务问题的一种权宜之计,直到我们的开发人员有时间正确解决它.)

我们通过从prod复制擦除数据来定期刷新我们的开发和测试环境.该副本包括任务和存储过程.如果存储过程在除生产中的那些服务器之外的任何服务器上运行,我们冒着破坏数据的风险,因此我必须记得告诉DBA在开发和测试中禁用该任务.

有没有办法(通过pl/sql?)来阻止存储过程在我们的生产环境之外运行?

作为故障保护,该过程使用未在dev或test中定义的别名,我宁愿避免生成的错误.

oracle plsql stored-procedures

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

PL/SQL脚本抛出错误

我正在使用PLSQL创建一个基于查询另一个表来更新表的过程,并且我正在使用循环来实现此目的.对于测试,我暂时不使用过程代码,只是尝试使下面的脚本工作.但它不断抛出错误,包括"遇到符号"文件结束""或"无效的SQL语句",基于小调整.我哪里错了?

DECLARE CURSOR cur IS
    SELECT * FROM Summary;
BEGIN
FOR rec in cur
LOOP
UPDATE Award
SET monthly_sales = (
   SELECT COUNT(*)
   FROM Sales
   WHERE employee_id = rec.employee_id
     AND to_char(Sales.SALES_DATE,'YY/MM')=to_char(SYSDATE,'YY/MM')
)
WHERE Summary.employee_id = rec.employee_id
END LOOP
END;
/
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql stored-procedures

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

如何在Java中执行Oracle PLSQL块

我有一个像这样的PL/SQL块:

BEGIN
  FOR i IN 1..100
  LOOP
    UPDATE rptbody 
       SET comments = 'abcs';
     WHERE (rptno> 100 and rptno < 200) and ROWNUM<2;
    COMMIT;
  END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)

需要使用Oracle JDBC执行此块.我尝试了以下方法:

  • 试图使用Statement对象执行此操作.由于这是一个块,因此引发了一个异常,说这不是一个sql语句

  • 这可以分成sql语句,但我有100个这样的块,这对于代码来说很麻烦,并且想把它留给sqlplus.

  • 尝试使用CallableStatement也没有用.

任何解决方案都会有帮助.

java sql oracle plsql jdbc

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

PL/SQL中的IN,OUT,IN OUT参数到底是什么

我在这里查询了一些问题以及在线观看和观看视频,但我仍然感到困惑的是IN,OUT.我问的原因是因为我正在编写一个程序,根据其他程序中的IN参数记录错误,

干杯!

oracle toad plsql stored-procedures

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

为什么这段代码不会进入PL/SQL的IF块?

我有PL/SQL代码以下,这不是进入IF块.为什么不进入IF Block?

感谢您的回复.

DECLARE
  p_datacenterid VARCHAR2(50) := '';
  p_dcid         VARCHAR2(50);
BEGIN
  dbms_output.put_line('test');
  -- Check if DataCenterId is null
  IF nvl(p_datacenterid, '') = '' THEN
      dbms_output.put_line('DataCenterID is empty');
      SELECT datacenterid
        INTO p_dcid
        FROM pod_tab
       WHERE url = 'dit3.ezlm.adp.com'
         AND rownum = 1;
  END IF;
END;
/
Run Code Online (Sandbox Code Playgroud)

oracle null plsql

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

Oracle:对函数的调用很奇怪

如果在所有者帐户下调用,则以下语法可以正常工作:

SELECT "MY_OWNER"."MY_PACKAGE".Convert(t.Value) FROM My_Table t
Run Code Online (Sandbox Code Playgroud)

但是当从另一个用户调用时,我收到以下错误:

ORA-00904: : invalid identifier
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:
Error at Line: 1 Column: ??
Run Code Online (Sandbox Code Playgroud)

哪一栏:?? 指着

SELECT "MY_OWNER"."MY_PACKAGE".Convert(t.Value) FROM My_Table t
                  ? 
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

UPDATE.这是一个被称为的函数:

FUNCTION Convert ...
Run Code Online (Sandbox Code Playgroud)

oracle plsql stored-procedures

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

SQL Developer Oracle,如何调用程序?

我有这样的delcared函数:

CREATE or replace PROCEDURE proc
(
  P_ID IN INTEGER,
  NAME OUT CHAR,
  SURNAME OUT CHAR,
  TOTAL OUT CHAR
)
 AS
    BEGIN
        SELECT NAME, SURNAME, sum(TOTAL) AS TOT
          INTO NAME,SURNAME,TOTAL
          FROM STATISTICS, PLAYERS, PERSON
          WHERE STATISTICS.SID=P_ID AND PERSON.ID=PLAYERS.SID AND      
          STATISTICS.PLAYERS_SID=PLAYERS.SID
        GROUP BY NAME,SURNAME;
END;
Run Code Online (Sandbox Code Playgroud)

Select语句有效,但如何在Oracle中调用此过程?

我试过类似的东西

EXEC proc(4);
Run Code Online (Sandbox Code Playgroud)

和

DECLARE
  NAME OUT CHAR,
  SURNAME OUT CHAR,
  TOTAL OUT CHAR

BEGIN
   P_ID := 12 ;
   proc (
   P_ID => P_ID,
   NAME => NAME,    
   SURNAME => SURNAME,
   TOTAL => TOTAL
);
END; …
Run Code Online (Sandbox Code Playgroud)

oracle plsql execute oracle-sqldeveloper

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