【问题标题】:Procedure with parameters in pl/sqlpl/sql 中带参数的过程
【发布时间】:2021-12-30 07:49:56
【问题描述】:

为什么添加参数后这个程序不起作用?

【问题讨论】:

  • 请不要粘贴截图,使用格式化文本见meta.stackoverflow.com/questions/285551/…
  • 正如@Wernfried Domscheit 已经提到的,当您可以在适当的标签中键入代码和错误消息以使其可见时,请不要使用屏幕截图来发布您的问题。这有助于其他用户搜索错误消息以寻找他们自己问题的答案。此外,在SYSTEM用户中编写自己的代码不是一个好习惯,即在数据库中执行管理工作的用户,最好创建一个具有方便权限的用户(在自己的对象中创建和写入)并编写你的代码在那里,所以你有分离的管理任务和应用程序

标签: sql oracle plsql procedure


【解决方案1】:

不需要IN OUT参数; IN 就足够了(因为 PLS_00363: SYSDATE 在调用过程时不能用作分配目标)。

当您操作参数的值时,我为此目的声明了局部变量。

另外,next_day 不能与 7 一起使用;使用日期名称(因此我的 alter session 将语言设置为英语,以便我可以使用 SUNDAY 作为日期名称)。

(我们不是已经讨论过了吗?你之前的问题去哪儿了?对,这里是:Function Next_Day in pl/sql;你为什么要创建另一个帐户?)

固定后:

SQL> CREATE OR REPLACE PROCEDURE liczba_niedziel (data_od  IN DATE,
  2                                               data_do  IN DATE)
  3  IS
  4     l_data_od  DATE;
  5     l_data_do  DATE;
  6     licznik    NUMBER := 0;
  7  BEGIN
  8     l_data_od := NEXT_DAY (data_od, 'SUNDAY');
  9     l_data_do := data_do;
 10
 11     WHILE l_data_od <= l_data_do
 12     LOOP
 13        l_data_od := l_data_od + 7;
 14        licznik := licznik + 1;
 15     END LOOP;
 16
 17     DBMS_OUTPUT.put_line (
 18        '...' || SYSDATE || ' - ' || l_data_do || '...' || licznik);
 19  END;
 20  /

Procedure created.

测试:

SQL> ALTER SESSION SET nls_date_language = 'english';

Session altered.

SQL> EXEC liczba_niedziel(sysdate, date '2022-01-18');
...30.12.2021 - 18.01.2022...3

PL/SQL procedure successfully completed.

SQL>

【讨论】:

    猜你喜欢
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 2022-01-05
    • 2021-06-16
    • 1970-01-01
    • 2010-10-24
    相关资源
    最近更新 更多