标签: plsql

将多列值插入单个插入值?

所以我有这个大学任务,我必须创建一个名为bill_overdue的触发器.当status = overdue的行插入表invoice时,会在另一个名为message的表中插入一行.

CREATE SEQUENCE AUTOINCREMENTMESSAGE
MINVALUE 100
START WITH 101
INCREMENT BY 1
CACHE 10
;

CREATE OR REPLACE TRIGGER BILL_OVERDUE
BEFORE INSERT ON INVOICE
FOR EACH ROW
WHEN (NEW.STATUS = 'Overdue')
BEGIN
INSERT INTO MESSAGE (MESSAGENO,MESSAGEDATE,ORIGIN,MESSAGE)
VALUES (AUTOINCREMENTMESSAGE.nextval,SYSDATE,USER,:NEW.DATEISSUED,:NEW.INVOICENO,:NEW.CAMPAIGNTITLE);
END;
/
Run Code Online (Sandbox Code Playgroud)

现在,你可以看到我想要添加:new.dateissued,:new.invoiceno并:new.campaigntitle进入一个字段(message).现在我知道我所做的是错的,但我已经尝试在它周围添加括号等,似乎没有什么做我想要的.我如何让它工作?有可能做我想做的事情或我完全错了吗?

sql database oracle plsql

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

PL/SQL - 防止ORA-06502

我经常得到这个错误(这太烦人了!):

错误报告:ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小ORA-06512:第305行06502. 00000 - "PL/SQL:数字或值错误%s"

示例存储过程循环遍历游标(具有大约10k行),执行某些逻辑,然后使用dbms_output.put_line将每条记录打印到'Script Output'Oracle SQL Developer中的选项卡.

有没有办法清除缓冲区或防止出现此错误(并中止其余的proc)?

如果可以的话,我可以使用它Mod function来清除缓冲区,每10行处理一次.

sql database oracle plsql

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

Oracle PL/SQL:为IN变量分配新值

我有一个程序定义为:

CREATE OR REPLACE PROCEDURE foo (
  AS_OF_DATE_IN IN DATE DEFAULT TRUNC(sysdate)-1
) AS ...
Run Code Online (Sandbox Code Playgroud)

哪些可以用这些方式执行:

-- passes '11-NOV-2011'
exec foo('11-NOV-2011');

--set DEFAULT value (yesterday's date)
exec foo();

--makes things more difficult, as default value isn't set
exec foo(NULL);
Run Code Online (Sandbox Code Playgroud)

我想做的是:

AS_OF_DATE_IN:=NVL(AS_OF_DATE_IN, TRUNC(sysdate)-1);
Run Code Online (Sandbox Code Playgroud)

但它会产生重新分配错误.

除了使用NVL()包装AS_OF_DATE_IN的所有用法之外,是否有更有效的方法来处理这种情况?

**编辑**我犯了一个相当愚蠢的错误 - 我正在写一个程序,而不是一个函数.该过程不返回值.

oracle plsql oracle10g

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

使用Oracle PL/SQL集合

我需要实现的目标是将游标中的所有记录都集成到一个集合中,以使用该游标中的数据填充表.不幸的是,我无法理解如何将数据从光标提取到数组中.我已尝试过批量收集,但没有办法.extend关键字是什么意思?

最后我如何从该阵列获取数据?

我首先声明了所需字段的记录.然后,我创建了一个这种类型的表.然后我批量收集从光标到表格的所有内容.它似乎工作但现在如何从该表中获取数据?

oracle collections plsql

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

在PL/SQL中添加约束

我有两张桌子:

Employee(eid, ename, age..)
Department(deptid, dname, managerid..) //manager id references eid
Run Code Online (Sandbox Code Playgroud)

如何在Department表上创建约束,使经理的年龄始终> 25?

sql oracle plsql

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

PL SQL的序列

我知道如何在pl sql中创建一个序列.但是,我如何将值设置为3个数字呢?在创建序列时是否有另一个sql语句来执行此操作?

所以一个例子是:

000
001
012
003
Run Code Online (Sandbox Code Playgroud)

多谢你们!

sql database oracle plsql

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

动态选择不会得到结果

我正在尝试在循环中执行动态选择,但我没有得到任何结果.我想让它像正常选择一样工作.

create or replace type proc_args as varray(20) of varchar2(50);
/

create or replace procedure proc_show_tab(args proc_args)
is
 id_kursora integer;
 wart integer;
 polecenie varchar2(30);

  begin
    for i in 1..args.count loop
      polecenie := 'SELECT * FROM '||args(i);
      execute immediate polecenie;        
    end loop;
  end;
/

show error;

declare
  args2 proc_args;
begin
  args2 := proc_args();
  args2.extend(2);
  args2(1) := 'osrodek';
  args2(2) := 'trasa';

  proc_show_tab(args2);
end;
/
Run Code Online (Sandbox Code Playgroud)

sql oracle select plsql dynamic

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

在SQL中从String中读取间距

我有一个字符串(带空格),我想从中分隔最后一个单词.例如:

"Steve Jobs" => Jobs
"Stack OverFlow Question" => Questions
Run Code Online (Sandbox Code Playgroud)

PL/SQL或SQL中是否有任何功能,以便我能够得到结果Jobs并Question分离出来?

sql oracle plsql plsqldeveloper

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

Oracle - ORA-01422:精确提取返回超过请求的行数

我还在为这个小型零售商店(这个场景,谢天谢地!)工作,我正在尝试用触发器解决这个问题.

相关实体是客户,付款和订单.付款是另外两个之间的链接实体,因此一个客户可以进行多笔付款,一个订单可以有多笔付款(不寻常但仍然可能),这一切都很好.

触发:

CREATE OR REPLACE TRIGGER Check_Payment_Status  
BEFORE UPDATE OF Order_Status ON Customer_Order 

for each row
  DECLARE paymentStatus payment.payment_status%type;
  BEGIN

    select payment.payment_status into paymentStatus
    from payment
    where order_no = :new.order_no;

    IF (paymentStatus ='Failed' OR paymentStatus IS NULL ) then  
      RAISE_APPLICATION_ERROR(-20103, 'The full payment has not been made so the order cannot be     processed further until then.');
      update customer_order set order_status='Delayed' where order_no= :new.order_no;
    END IF;

    IF (paymentStatus ='Successful' ) then  
      update payment set payment_date=SYSDATE where order_no= :new.order_no;
    END IF; …
Run Code Online (Sandbox Code Playgroud)

oracle triggers plsql cursor

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

PLS-00103:在检查绑定变量中的值时遇到符号"EXCEPTION"错误

我收到了我执行的PL/SQL块的以下错误.

ORA-06550:第16行,第1列:PLS-00103:遇到以下某种情况时遇到符号"EXCEPTION":

我在下面的匿名程序工作正常,直到我包括user defined exception e_nonrented.哪个检查bindvariable :g_movie_id=2..If 的值是否是它抛出异常的情况......

以下是代码:

VARIABLE g_movie_id NUMBER EXEC :g_movie_id := 2
DECLARE v_count NUMBER;
v_movieid NUMBER;
v_title mm_movie.movie_title%TYPE;
e_nonrented

 EXCEPTION;
BEGIN
  SELECT m.movie_title,
    COUNT(r.rental_id),
    r.movie_id
  INTO v_title,
    v_count,
    v_movieid
  FROM mm_movie m,
    mm_rental r
  WHERE m.movie_id = r.movie_id
   AND m.movie_id = :g_movie_id
  GROUP BY m.movie_title,
    r.movie_id;
  DBMS_OUTPUT.PUT_LINE(v_title || ': ' || v_count);

  IF :g_movie_id = 2 THEN
    RAISE e_nonrented;

  EXCEPTION
  WHEN no_data_found THEN
    DBMS_OUTPUT.PUT_LINE('there is no movie id for: ' || …
Run Code Online (Sandbox Code Playgroud)

oracle plsql ora-06550

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