【问题标题】:INTO CLAUSE IS NOT PERMITTED不允许进入条款
【发布时间】:2020-09-29 03:30:11
【问题描述】:

我为选择创建了动态 DB2 存储过程。我将使用这个通用查询通过传递参数来执行多个选择语句。

SET V_SELECT =                   
  'SELECT ' || SELECT_FIELDS ||  
  ' INTO '  || INTO_FIELDS   ||  
  ' FROM '  || TABLE_NAME    ||  
  ' WHERE ' || WHERE_CLAUSE  ||  
  ' WITH UR';    
EXECUTE IMMEDIATE V_SELECT;     

下面是我的查询的样子。

   SELECT B.PROD_TYP  
   INTO HOST_VAR_PROD_TYP
   FROM TABLE_A   A
   INNER JOIN TABLE_B  B
   ON A.ROW_ID = B.ROW_ID
   WHERE A.PROD_CD = HOST_VAR_PROD_CD;

当我运行它时,我得到了

“不允许进入条款”。

提前致谢。

【问题讨论】:

  • 动态 SQL 似乎不支持 INTO
  • @EricBrandt,感谢您的回复。有没有办法可以将 Selected 列的值返回给调用程序。
  • DB2 中没有Dynamic Stored procedure 这样的术语。您可能使用动态 sql 语句创建了一个 SQL 过程。 HOST_VAR_PROD_CD 是什么,它的值是如何传递给 SP 的?这是 SP 变量/参数吗?此 select 语句是否预计仅返回不超过 1 行? HOST_VAR_PROD_TYP 是什么?这是SP变量/参数吗?
  • @MarkBarinstein,感谢您的检查。是的,我正在使用动态 sql 创建一个存储过程。 HOST_VAR_PROD_CD 和 HOST_VAR_PROD_TYP 在存储过程中定义。我将使用 COBOL 程序为 HOST_VAR_PROD_CD 赋值并传递给存储过程。 CREATE PROCEDURE T2.SPOF2200 (IN SELECT_FIELDS VARCHAR(100), IN INTO_FIELDS VARCHAR(100),IN TABLE_NAME VARCHAR(200),IN WHERE_CLAUSE VARCHAR(200),IN HOST_VAR_PROD_CD DEC(3,0), OUT HOST_VAR_PROD_TYP CHAR(05))

标签: sql stored-procedures dynamic db2 cobol


【解决方案1】:

我手头没有 DB2 for z/os,但您应该这样做:

  DECLARE V_STMT VARCHAR(200);
  DECLARE V_NAME VARCHAR(128);
  DECLARE V_COLCOUNT INT;

  SET V_NAME = 'SYSTABLES';
  SET V_STMT = 'SET ? = (SELECT COLCOUNT FROM SYSIBM.SYSTABLES WHERE CREATOR = ''SYSIBM'' AND NAME = ?)';
  PREPARE S1 FROM V_STMT;
  EXECUTE S1 INTO V_COLCOUNT USING V_NAME;

您需要SET 声明。根据您的需要构造V_STMT 值。第一个? 表示您从select 进入V_COLCOUNT 的结果。第二个? 表示您使用V_NAME 变量传递的参数。

【讨论】:

    猜你喜欢
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-28
    • 2018-01-22
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多