【问题标题】:how to remove Error for schema bindings in redshift如何在 redshift 中删除模式绑定的错误
【发布时间】:2021-04-19 18:17:12
【问题描述】:

我希望能够使 CTE 使以下 SQL 工作,我收到错误 ERROR: Cannot replace a normal view with a late binding view 对于下面的 SQL,我可以通过什么方式对其进行更改以使其不与架构视图绑定?

CREATE OR REPLACE 
  VIEW "dev"."XXBRK_DAILY_FX_RATES" ("F_C", "CURRENCY", "C_D", "C_R") AS
  SELECT DISTINCT GL.GL_R.F_C, GL.GL_R.CURRENCY, 
GL.GL_R.DATE, GL.GL_R.C_R
FROM GL.GL_R
with no schema binding
WHERE GL.GL_R.C_T='Corporate'
UNION ALL
SELECT DISTINCT GL.GL_R.F_C, GL.GL_R.F_C CURRENCY, GL.GL_R.DATE, 1 
FROM GL.GL_R;

【问题讨论】:

    标签: sql database amazon-redshift common-table-expression


    【解决方案1】:

    所以你似乎有一个声明问题。最后 4 行在 ';' 之后而不是正在运行的语句的一部分。我猜这些是无关紧要的,并且是错误发布的。

    Redshift 上的视图有几种类型 - 正常和后期绑定是 2。视图“dev”。“XXBRK_DAILY_FX_RATES”似乎已经存在于您的集群中,因此您的命令试图替换它,而不是创建它。错误消息是正确的,您不能用不同类型的视图替换视图。您需要删除视图,然后将其重新创建为后期绑定。

    现在要小心,因为依赖于此视图的其他对象在您放置它时会受到影响(尤其是在您 CASCADE 放置时)。当您删除并重新创建视图时,它是数据库中的一个新对象,但替换视图只是为同一对象创建一个新定义。在执行之前了解 drop 对数据库的影响。

    【讨论】:

    • 啊,我看到上面的分号是一个错误,我放弃了视图并再次尝试了代码,但我现在似乎在 WHERE 附近遇到了语法错误,我不确定出了什么问题
    • “没有模式绑定”需要放在最后(就在;之前)。现在它位于定义视图返回的数据的 select 语句的中间。当您尝试更改视图类型时,移动它只会让您回到原来的错误消息。
    • aahh 那么我怎样才能删除错误消息并确保它正常运行?放弃课程视图后
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 2012-08-14
    相关资源
    最近更新 更多