【问题标题】:DB Links as Parameters in a FunctionDB 链接作为函数中的参数
【发布时间】:2019-08-25 19:17:45
【问题描述】:

我正在创建一个接受两个参数的函数。我的参数之一将用作我的语句的数据库链接。我试过连接它。我将如何实现这一目标?

显示这个错误

ORA-00923:在预期的 ORA-06512 处未找到 FROM 关键字 “NOINK.CHECK_SECOND_REF_DIE”,第 13 行。

下面是代码。

drop function check_second_ref_die;

create or replace function check_second_ref_die(lotNumber in VARCHAR2, db_link in VARCHAR2)
    return varchar2
is

    row_count NUMBER; 
    sql_statement VARCHAR2(300);


BEGIN 
    sql_statement := 'SELECT COUNT(*) FROM wcrepo.WCR_WAFER_REFERENCE@lepftds.itg.ti.com 
    WHERE waferconfigfile = (SELECT waferconfigfile FROM program_setup_rev@' || db_link ||
    'WHERE device = (SELECT device FROM noink.lot WHERE lot_num = ' ||lotNumber || ') 
    AND setup_cnt=0) AND status =' || 'Approved' || 'AND ref_die_type =' || 'Secondary';

    execute immediate sql_statement into row_count;

    IF (row_count != 0) THEN
        RETURN 'TRUE';
    ELSE
        RETURN'FALSE';
    END IF;

  END;

这是我尝试调用函数时的代码

SELECT CASE
           WHEN check_second_ref_die ('8019572', 'rfabtwdb.dal.make.ti.com') = 'TRUE'
           THEN 'EXISTS' ELSE 'NOT EXISTS'
       END
           AS RESULT
  FROM DUAL

【问题讨论】:

  • “它不起作用” 不是很清楚。请说出发生了什么,包括您收到的任何错误消息。请记住,我们没有您的环境,我们无法运行您的代码。我们只知道您告诉我们什么。
  • 我已经编辑过了。对此表示感谢和抱歉

标签: oracle function plsql dynamic-sql database-link


【解决方案1】:

AND status =' || 'Approved' || 'AND

这是错误的。删除连接运算符,我们有...

AND status =ApprovedAND 

... 这不是有效的 SQL。要引用字符串文字,您需要转义单引号。最简单的方法是使用其中的两个:

AND status =''Approved'' AND

您需要修复代码中的所有字符串文字。

动态 SQL 很难,因为它将编译错误转化为运行时错误。通过包含一些简单的检测,您可以更轻松地调试代码。如果您的代码在 EXECUTE IMMEDIATE 之前有这一行,那么您可能已经看到了执行的语句,并且可能自己发现了大器。

dbms_output.put_line(v_sql);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 2013-06-03
    相关资源
    最近更新 更多