当前位置: 首页 > 面试题库 >

为什么使用EXECUTE IMMEDIATE运行此查询会导致查询失败?

田向荣
2023-03-14
问题内容

我正在编写一个PL / SQL过程,该过程需要动态生成一些查询,其中之一涉及使用来自查询的结果作为参数来创建临时表。

CREATE OR REPLACE PROCEDURE sqlout(query IN VARCHAR2)
IS
BEGIN
EXECUTE IMMEDIATE  'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ');';
END;

它可以正确编译,但是即使使用非常简单的查询,例如:

BEGIN
    sqlout('SELECT * FROM DUAL');
END;

IT抛出ORA-00911: invalid character。如果我手动运行创建的查询,它将正确运行。在这一点上,我能够确定是什么导致了问题。


问题答案:

尝试丢掉“;” 从您立即执行的字符串内部。

EXECUTE IMMEDIATE  'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ')';


 类似资料:
  • 这个查询有什么问题? 错误消息: PreparedStatementCallback;错误的SQL语法[选择u.id,u.user_id,count(不同的pf.id),IfNULL(upm.apprum_autoassign_enable,true)来自用户u内部连接user_roles-ur-on-ur.user_ id=u.id左外部连接user_preference_management-

  • 我得到的回答是。。。 {"错误":{"root_cause":[{"type":"illegal_argument_exception","原因":"畸形动作/元数据行[2],预期START_OBJECT或END_OBJECT找不到[VALUE_STRING]"}],"type":"illegal_argument_exception","原因":"畸形动作/元数据行[2],预期START_OBJ

  • 问题内容: 我有一个无法执行的SQL查询: 该表的PK为(int)。该视图是对该表的查询,该表与其他一些表结合在一起以决定我们是否信任某个人。该视图只有一列:。 当我尝试执行此查询时,出现以下错误: 消息209,级别16,状态1,第3 行列名称“ CreatedDate”不明确。 我知道这个错误告诉我列名是不明确的,我需要在表的别名’p’开头。 该查询有效: 我不明白的是为什么我需要在语句中而不是

  • 我看到Databricks问题,但不理解 为什么使用 UDF 会导致笛卡尔积而不是完全外连接?显然,笛卡尔积将比完全外连接(Joins 就是一个例子)多得多的行,这是一个潜在的性能影响。 有什么方法可以在Databricks-Question中给出的示例中强制在笛卡尔积上进行外部连接? 此处引用Databricks问题: 我有一个使用SQLContext对流数据执行SQL语句的Spark Stre

  • 问题内容: 我有一个查询,在我认为可能不使用索引的情况下,出于好奇,我将其重现: 创建一个具有1.000.000行(在中有10个不同的值,在中有500个字节的数据)的。 创建一个索引并收集表统计信息: 尝试获取和的不同值: 不使用索引,前提是提示不会更改。 我想在这种情况下不能使用索引,但是为什么呢? 问题答案: 我运行了Peter的原始内容并复制了他的结果。然后我应用了dcp的建议… 之所以如此

  • 问题内容: 我有一个配置单元表,该配置表按年,月,日和小时划分。我需要对其执行查询以获取最近7天的数据。这是在。我的查询当前看起来像这样: 这需要很长时间。当我用上面的实际数字代替时,请说: 它会在几分钟内完成。有什么办法可以更改上面的脚本,以便实际上只包含查询中的数字而不是函数? 我尝试使用像: 但这不能解决问题。 问题答案: 解决方案 原始查询出了什么问题? unix_timestamp()