尝试分配和使用过程中的变量时,无法安全重播调用

发布于 2025-01-28 19:48:36 字数 480 浏览 4 评论 0原文

我正在尝试将来自一个表中的列中的数据用作另一个表的列别名。

DECLARE 
    var1 VARCHAR(20),
    var2 VARCHAR(20);
BEGIN
WITH 
TABLE1 AS (SELECT ROWNUM RN, * FROM TABLE)
,A1 AS (SELECT TO_CHAR(VALUE) INTO var1 FROM TABLE1 WHERE RN = 1)
,A2 AS (SELECT TO_CHAR(VALUE) INTO var2 FROM TABLE1 WHERE RN = 2)
SELECT 
COL1 AS var1,
COL2 AS var2
FROM TABLE2;
END;
/

显然,这是我的实际过程的简化版本,但是我有机会获得一些帮助来理解为什么我从中收到以下错误:

ORA-25408:无法安全重播呼叫

,建议也非常欢迎!

I am trying use the data from a column in one table as column aliases of another table.

DECLARE 
    var1 VARCHAR(20),
    var2 VARCHAR(20);
BEGIN
WITH 
TABLE1 AS (SELECT ROWNUM RN, * FROM TABLE)
,A1 AS (SELECT TO_CHAR(VALUE) INTO var1 FROM TABLE1 WHERE RN = 1)
,A2 AS (SELECT TO_CHAR(VALUE) INTO var2 FROM TABLE1 WHERE RN = 2)
SELECT 
COL1 AS var1,
COL2 AS var2
FROM TABLE2;
END;
/

This is obviously a simplified version of my actual procedure, but is there a chance I can get some help in understanding why I am receiving the following error from this:

ORA-25408: can not safely replay call

If there is an easier way to go about this task to begin with, suggestions are more than welcome as well!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

把时间冻结 2025-02-04 19:48:36

您的查询不会给出该错误。

  • 有一个错字,因为第2行应该以;而不是,
  • ,然后是一种用于表收集表达式而不是标识符的关键字对于桌子。
  • 然后,您不能将*与其他列一起使用,而无需将其与表别名前缀。
  • 如果您修复了所有这些内容,则获得execpion pl/sql:ora-01744:不适当地从

Oracle 12中> 中,您可以从表格code> table_name <的表中选择第一个和第二个值/code>使用:

DECLARE 
  var1 VARCHAR(20);
  var2 VARCHAR(20);
BEGIN
  SELECT TO_CHAR(VALUE)
  INTO var1
  FROM table_name
  -- ORDER BY value
  OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY;

  SELECT TO_CHAR(VALUE)
  INTO var2
  FROM table_name
  -- ORDER BY value
  OFFSET 1 ROWS FETCH NEXT 1 ROW ONLY;
  
  DBMS_OUTPUT.PUT_LINE(var1);
  DBMS_OUTPUT.PUT_LINE(var2);
END;
/

但是,您通常还会使用子句的顺序,而不是按照数据文件读取的任何顺序来订购条款。

db&lt;&gt;&gt;

Your query does not give that error.

  • There is a typo as line 2 should end with ; and not ,
  • Then TABLE is a keyword used for table collection expressions and not for an identifier for a table.
  • Then you cannot use * with other columns without prefixing it with a table alias.
  • If you fix all that then you get the exeception PL/SQL: ORA-01744: inappropriate INTO

From Oracle 12, you can select the first and second values from a table with the name TABLE_NAME into the variables using:

DECLARE 
  var1 VARCHAR(20);
  var2 VARCHAR(20);
BEGIN
  SELECT TO_CHAR(VALUE)
  INTO var1
  FROM table_name
  -- ORDER BY value
  OFFSET 0 ROWS FETCH NEXT 1 ROW ONLY;

  SELECT TO_CHAR(VALUE)
  INTO var2
  FROM table_name
  -- ORDER BY value
  OFFSET 1 ROWS FETCH NEXT 1 ROW ONLY;
  
  DBMS_OUTPUT.PUT_LINE(var1);
  DBMS_OUTPUT.PUT_LINE(var2);
END;
/

However, you would normally also use an ORDER BY clause rather than taking the rows in whatever order they are read from the data files.

db<>fiddle here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文