sql - 如何在 oracle 脚本中使用变量作为表名

标签 sql oracle scripting plsql

我有一个 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/

相关文章:

sql - SQL 的 DELETE 语句真的删除数据吗?

Oracle pl/sql 提供环境特定参数的首选方式

mysql - 如何在sql中按升序选择日期(dd/mm/yyyy)

sql - 永远循环的 T-SQL 中的 While 子句

oracle - 在 Oracle Apex 中创建手动链接

linux - 如何使用 Linux shell 脚本从文件中删除 ^[ 字符?

python - "scripting"vim 使用更细粒度的 python

windows - 下载很多小文件

sql - 简单的 SQL 查询会引发错误

java - jdbc 可以通过 SOCKS 代理连接到 Oracle 数据库吗?