Sql 有人知道为什么我的execute immediate不';你在PRO*C里有什么?

Sql 有人知道为什么我的execute immediate不';你在PRO*C里有什么?,sql,c,oracle,embedded-sql,Sql,C,Oracle,Embedded Sql,有人能找出我在以下PRO*C代码中的错误吗?我无法编译以下内容: int v1 = 5096; int v2 = 8110; int v3 = 8111; int v4 = -1; char stmt[6000]; strcpy(stmt, " MERGE INTO LDX_STYLE_MOVEMENTS ssd USING (SELECT :1 pk from dual) ssd_pk ON (ssd.style_movements_pk = ssd_pk.pk) WHEN NOT

有人能找出我在以下PRO*C代码中的错误吗?我无法编译以下内容:

int v1 = 5096;
int v2 = 8110;
int v3 = 8111;
int v4 = -1;
char stmt[6000];

strcpy(stmt, " MERGE INTO LDX_STYLE_MOVEMENTS ssd  USING (SELECT :1 pk from dual) ssd_pk   ON (ssd.style_movements_pk = ssd_pk.pk)  WHEN NOT MATCHED THEN insert (style_movements_pk, style, from_subclass, to_subclass, reclassified_date, change_type_fk) values(LDX_STYLE_MOVEMENTS_SEQ.nextval , null, :2, :3, null, :4 )");   

EXEC SQL execute immediate  :stmt using :v1, :v2, :v3, :v4;

executeimmediate
()不支持
USING
子句

您可以准备并执行它(使用):

看起来您根本不需要动态地执行此操作,但是如果您选择执行此操作,则需要使用适当的方法

文档中的更多详细信息:

方法1解析SQL语句,然后使用executeimmediate命令立即执行SQL语句。该命令后面是一个字符串(主机变量或文本),其中包含要执行的SQL语句,不能是查询

EXECUTE IMMEDIATE语句的语法如下所示:

EXEC SQL EXECUTE IMMEDIATE { :host_string | string_literal };
EXEC SQL PREPARE statement_name 
    FROM { :host_string | string_literal }; 

使用方法2,SQL语句可以包含输入主机变量和指示符变量的占位符

PREPARE语句的语法如下所示:

EXEC SQL EXECUTE IMMEDIATE { :host_string | string_literal };
EXEC SQL PREPARE statement_name 
    FROM { :host_string | string_literal }; 
PREPARE解析SQL语句并为其命名

语句_name是预编译器使用的标识符,不是主机或程序变量,不应在Declare部分声明。它只是指定要执行的准备好的语句

EXECUTE语句的语法为

EXEC SQL EXECUTE statement_name [USING host_variable_list];
其中,host_variable_list代表以下语法:

:host_variable1[:indicator1] [, host_variable2[:indicator2], ...] 
EXECUTE使用为每个输入主机变量提供的值执行已解析的SQL语句


错误是什么?
execsqlexecuteimmediate:stmt使用:v1,:v2,:v3,:v4在我看来不像C。这是PRO*C程序。嗨,亚历克斯!Thjis只是我函数的一个简化示例。实际函数非常复杂,不同的数组作为输入。我必须动态地构建这个查询。谢谢你的帮助@Dax-将您遇到的错误放入问题中对未来的访问者仍然有帮助。好主意!:-)我会的