如何在DB2中存储一些SQL代码

如何在DB2中存储一些SQL代码,db2,db2-luw,Db2,Db2 Luw,我有一些SQL代码,它们基本上是应用一些转换,不接受任何参数或…这里是一个查询示例 CREATE TABLE RESULT.R AS( SELECT DISTINCT INVOICE, VOLUME, SUBCODE FROM (SELECT * FROM Table 1 WHERE code= '1') AS TB JOIN (SELECT * FROM Table2 WHERE IND_STATUS_TYPE IS NULL AND

我有一些SQL代码,它们基本上是应用一些转换,不接受任何参数或…这里是一个查询示例

CREATE TABLE RESULT.R AS(
SELECT 
DISTINCT INVOICE, VOLUME, SUBCODE
FROM
(SELECT
    *
FROM
    Table 1
WHERE
    code= '1') AS TB
JOIN
(SELECT
    *
FROM
    Table2
WHERE 
    IND_STATUS_TYPE IS NULL
    AND
    type != 'Error' 
    AND
    STATUSCODE = '153'
)
ON
...
-更新-


此转换代码依赖于在创建表1和表2之前需要执行的两个其他转换。在db2中存储这些代码的最佳方式是什么,这样每个访问数据库的人都可以访问它,并能够运行您想要的视图。您可以从中阅读有关视图的更多信息

视图提供了在一个或多个视图中查看数据的不同方式 桌子;它是结果表的命名规范。这个 规范是一个SELECT语句,每当视图被调用时都会运行该语句 在SQL语句中引用。视图中的列和行与 一张桌子。所有视图都可以像表一样用于数据检索


为什么不使用SQLPL存储过程在数据库中存储这样的逻辑呢? 存储过程可以返回结果集,也可以不返回,这取决于您选择了一个或多个结果集

要调用逻辑,只需调用存储过程,就可以将该过程上的EXECUTE授予特定角色或用户/组

您还可以使用表函数来存储代码


Db2知识中心和samples目录树中的Db2 LUW安装文件夹中都有大量SQL PL过程示例。

创建一个视图……此外,如果希望访问数据库的每个人都可以访问它,则需要将视图上的select授予每个人。例如,将yourview上的SELECT授予Public我忘了提到的一点是,最终的转换代码取决于需要首先运行的一系列其他中间转换。i、 e.首先需要执行2,3段代码,并创建两个临时表,然后才能运行最终代码。我可以将最终代码存储为“视图”,但之前的数据准备代码如何?我更新了我的原始问题以反映此问题。@H.Z.看看常见的表表达式CTE,这可能会满足您的需要:因此建议为每个转换创建一个SP?我可以在SP中使用“CREATETABLE”语句吗?SQL PL过程可以使用动态SQL来运行DDL,例如CREATETABLE。它们可以包含多个转换。如果需要,它们可以包含多个工作单元。它们可以具有错误检测和恢复以及过程逻辑。您需要研究IBM随DB2LUW提供的示例。这是我的建议。