Sql 有人知道为什么我的execute immediate不';你在PRO*C里有什么?
有人能找出我在以下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
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-将您遇到的错误放入问题中对未来的访问者仍然有帮助。好主意!:-)我会的