[英]stored procedure to create a view
好的,我知道这个问题已经被问到了。 我读到的一切都“很好......你可以用动态DSL来做,但不要这样做”我的问题是为什么。 我还是新手,所以我正在学习如此忍受我,但这就是我正在做的事情。 我想使用存储过程来创建动态视图(但不是临时表)视图有两个日期用于建立开始和结束日期。 它看起来像这样:
create or replace view MyView as
SELECT
A.COLUMN_A
FUNCTION1(to_date('2/10/2011','MM/DD/YYYY') TOTAL1,
FUNCTION2(to_date('2/15/2011','MM/DD/YYYY') TOTAL2
FROM TABLE_A A;
然后,此视图用于生成Crystal中报表所需的数据。 问题是我们即将开始在另一种语言中使用这些相同的sql语句。 (我们目前正在使用delphi,但是关于使用另一种语言(但我不知道另一种语言是什么))我想在存储过程中创建视图的原因是,因为a)视图是动态的,并且基于用户选择的日期范围和b)而不是必须在多行语言中放入一些相当大的视图(由于更改日期范围选择而必须在运行中创建),而不是在函数和参数的单行上需要通过。 我读到的很多内容都说使用动态SQL创建视图很糟糕,但是知道它已经是一个专门为用户动态创建的动态视图,有没有人看到这个问题? 我问,因为我不想让自己陷入困境,因为我不想把自己弄出来,想要把我所有的头发都拉出去。
我做Delphi前端和SQL Server后端。 为什么要使用视图? 我总是用一个简单的SELECT创建一个SP,它可以很好地完成工作。 如果频繁使用Crystal Report(通常是这种情况),我只需创建一个永久表,每次运行SP时都会清除并重新填充。 简短,甜美,简单。
动态创建视图(或任何数据库对象)就像在运行时操作代码一样。 在好的和坏的方面强大。
您可能遇到的危险和问题:
在99.9%中,不需要动态创建对象,如果不是0.1%,则不应使用它们。
鉴于您对手头任务的描述:为什么不直接使用带有变量部分的sql语句作为绑定变量并使用它? 我不认为这里需要一个视图。
生成视图只是一个好主意,如果它真的是代码生成并且通常是相当永久的。 因为它是模式更改,所以应该将其视为一种高级技术,并且我总是尝试按照复杂性的顺序使用数据库技术。
即对于某些表/视图设计,如果可以使用视图完成,请尝试。 如果性能确实需要索引视图,请尝试这样做。 或者,可以是计算列或持久计算列。 也许是内联表值函数,或多语句表值函数,或者可能是存储过程。 所以我只在必要时尝试升级。
在您的情况下,“视图”也可以是SQL Server中的内联表值函数(至少是DB2),这样的生物就像参数化视图。 您还可以直接从大多数报告工具(当然还有大多数语言/数据库库)使用参数化存储过程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.