You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下RM/COBOL通过InstantSql操作PostgreSQL建删表失败求助

解决RM/COBOL InstantSQL执行PostgreSQL DDL语句的语法错误问题

问题原因

你当前使用的SQL PREPARE QUERY + SQL START QUERY组合是InstantSQL专为**返回结果集的操作(如SELECT)**设计的语法。而CREATE TABLE/DROP TABLE/GRANT这类DDL语句属于非查询类操作,不会返回结果集,用这套流程执行会触发语法解析错误(错误码HY000)。

解决方案

对于DDL语句,直接使用SQL EXECUTE IMMEDIATE语句执行,无需经过PREPARE和START QUERY步骤。

示例:执行DROP TABLE

MOVE "drop table persons1" TO sql-QrySQL

SQL EXECUTE IMMEDIATE sql-ConnectionHandle, sql-QrySQL.

IF NOT sql-OK
  display "UNSUCCESFUL EXECUTE!!!"
  PERFORM WITH TEST AFTER UNTIL sql-EndOfData
    SQL DESCRIBE ERROR sql-Error-Description
    IF NOT sql-EndOfData
      PERFORM DISPLAY-ERROR-INFO
    END-IF
  END-PERFORM
  GO TO Z
END-IF

示例:执行CREATE TABLE

MOVE "CREATE TABLE Persn2(PersonID int)" TO sql-QrySQL

SQL EXECUTE IMMEDIATE sql-ConnectionHandle, sql-QrySQL.

IF NOT sql-OK
  display "UNSUCCESFUL EXECUTE!!!"
  PERFORM WITH TEST AFTER UNTIL sql-EndOfData
    SQL DESCRIBE ERROR sql-Error-Description
    IF NOT sql-EndOfData
      PERFORM DISPLAY-ERROR-INFO
    END-IF
  END-PERFORM
  GO TO Z
END-IF

示例:执行GRANT语句

注意:PostgreSQL中GRANT语句的用户不需要加单引号,修正后语句如下:

MOVE "grant create on database ttrac to postgres;" TO sql-QrySQL

SQL EXECUTE IMMEDIATE sql-ConnectionHandle, sql-QrySQL.

IF NOT sql-OK
  display "UNSUCCESFUL EXECUTE!!!"
  PERFORM WITH TEST AFTER UNTIL sql-EndOfData
    SQL DESCRIBE ERROR sql-Error-Description
    IF NOT sql-EndOfData
      PERFORM DISPLAY-ERROR-INFO
    END-IF
  END-PERFORM
  GO TO Z
END-IF

关键说明

  • SQL EXECUTE IMMEDIATE专门用于执行不需要返回结果集的SQL语句,包括DDL、DML中的非查询操作(如不带RETURNING子句的INSERT/UPDATE/DELETE)。
  • 你之前成功执行的SELECT/UPDATE/INSERT(带结果集或需要处理返回值)仍可继续使用PREPARE QUERY + START QUERY流程。

内容的提问来源于stack exchange,提问作者user22426344

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 19:52:18