百度
360搜索
搜狗搜索

execute immediate,存储过程中使用 execute immediate 报无效sql 但sql打印出来可以单独执行?详细介绍

本文目录一览: 存储过程中使用execute immediate时,报缺少关键字的错误

v_sql 语句被设定为:

```sql

v_sql := 'SELECT TO_NUMBER(COUNT(*))

FROM tb_web_ticket

WHERE t.fromStationId = ' || iv_fromStation || '

AND t.returnDate BETWEEN TO_DATE(''' || iv_beginDate || ''',''YYYY-MM-DD'')

AND TO_DATE(''' || iv_endDate || ''',''YYYY-MM-DD'')';

```

之后,使用`EXECUTE IMMEDIATE`命令执行这条SQL语句并将结果存入ov_totalRecords变量中。

关于`andt.returndatebetweendate...`这部分的错误语法,正确的拼接方式应该是:

... BETWEEN TO_DATE(v_iv_beginDate, 'YYYY-MM-DD') AND TO_DATE(v_iv_endDate, 'YYYY-MM-DD')

完整的语句应该是这样的:

v_sql := ... [其他部分] ...

AND t.returnDate BETWEEN TO_DATE(v_iv_beginDate, 'yyyy-mm-dd')

AND TO_DATE(v_iv_endDate, 'yyyy-mm-dd');

EXECUTE IMMEDIATE v_sql INTO ov_totalRecords;

在这个修改后的版本中,`v_iv_beginDate` 和 `v_iv_endDate` 这两个变量被直接用于 `TO_DATE` 函数中,这样就能正确地将日期字符串转换为Oracle数据库可以识别的日期格式。同时,所有的SQL关键字和函数都保持了正确的格式和大小写。

存储过程中使用 execute immediate 报无效sql 但sql打印出来可以单独执行?

在执行这条语句 `executeimmediate'DELETE from'||LO_DEL||''` 时,from 关键字后面确实应该加一个空格,以符合 SQL 语句的语法规范。同时,LO_DEL 是用 varchar2 类型定义的变量,确保其值正确无误。

根据你的描述,我推测你可能没有指定数据库的名称。在执行数据库操作时,如果函数没有在对应的数据库下执行,可能会导致执行不正确。你可以尝试使用 `dataname.dbo.tablename` 的形式来指定数据库和表名。

关于你提到的 executeimmediate 语句,从和单引号之间确实需要有一个空格。另外,如果你已经将 SQL 语句赋值给了 LO_SQL 变量,那么直接执行 `executeimmediate LO_SQL` 就可以了。这样就能避免因为空格等小错误而导致的执行问题。

总结一下,为了确保语句的正确执行,你应该注意以下几点:

1. from 关键字后加空格。

2. 确保 LO_DEL 变量的值正确无误。

3. 如果需要指定数据库和表名,使用正确的语法形式。

4. 直接执行已赋值的 LO_SQL 变量,无需再拼接字符串。

希望这些建议能帮助你解决问题。

阅读更多 >>>  数据库复制库表及数据,怎么快速复制数据库的表 克隆其他数据库的方法

网站数据信息

"execute immediate,存储过程中使用 execute immediate 报无效sql 但sql打印出来可以单独执行?"浏览人数已经达到18次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:execute immediate,存储过程中使用 execute immediate 报无效sql 但sql打印出来可以单独执行?的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!