我有一个 pl\sql 脚本,我想将脚本中使用的表名设置为一个变量。因此,根据我在网上找到的一些示例,我编写了以下代码。第一部分有效,所以我认为我的一般语法是正确的,但在第二部分,我尝试将变量用于表名时出错(“SQL 错误:ORA-00903:无效的表名”)。
任何人都知道我做错了什么......我没有做很多 PL\SQL 所以也许我只是错过了一些明显的东西。
--works
variable numOfrecords number;
exec :numOfrecords := 10;
select * from customers2008 where rownum < :numOfrecords;
--does not work
variable tableNm CHAR;
exec :tableNm := 'customers2008';
print tableNm;
select * from :tableNm;
最佳答案
如果您从 sqlplus 运行此脚本(看起来是这种情况),您希望使用 DEFINE 命令,该命令允许您创建只是直接字符串替换的 sqlplus 替换变量,例如:
define tableNm = 'customers2008'
select * from &tableNm;
见 Using Sql*Plus有关如何使用它们的更多信息。您可以使用预定义的位置替换变量从命令行将值传递到脚本中,如下所示:
define tableNm = &1
select * from &tableNm;
...然后像这样调用 sqlplus:
sqlplus user/pwd@server @myscript.sql customers2008
如果您没有在命令行中传递值,则会提示脚本调用程序输入该值。
有关绑定(bind)变量和替换变量之间的区别,请参见下面 Dave Costa 的回答。
关于sql - 如何在 oracle 脚本中使用变量作为表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1179652/