PL/SQL UPDATE/INSERT 与 table 的变量

PL/SQL UPDATE/INSERT with table's variable

是否可以在不创建 VARCHAR 和使用 EXECUTE IMMEDIATE 的情况下为 table 名称使用变量来构建语句?

例如:

@table_name := test_table

UPDATE @table_name
SET col1 = val1
WHERE condition...;

这是我的实际解决方法:

DECLARE
  sql_stmt VARCHAR2(1000);
  table_name VARCHAR2(30) := 'test_table';
BEGIN
  sql_stmt := 'UPDATE ' || table_name || ' SET col1 = val1...';
  EXECUTE IMMEDIATE sql_stmt;
END;
/

"[Is it] possible to build a statement using variables for the table name without creating a VARCHAR and using EXECUTE IMMEDIATE?"

没有

SQL 是一种强类型语言。编译器需要实际的 table 名称来验证 SQL 语句的各个组件(投影、过滤器等)。

动态SQL(立即执行和DBMS_SQL)对于缩短编译时验证是必要的。从本质上讲,它是一种机制,可以减轻编译器验证 SQL 并由我们自己承担的负担(因为人类比机器更擅长此类工作。不是)。

或者,它是一种生成运行时错误而不是编译错误的机制。

无论哪种方式,知道过滤器中的 COLUMN 的名称但不知道正在更新的 TABLE 的名称是很奇怪的。