我想在PL / SQL中为create view语句编写DDL语句。我怎样才能做到这一点?

时间:2014-08-07 08:11:08

标签: plsql

我是这个概念的新手。我想在PL / SQL中编写DDL语句。在下面创建视图语句:任何人都可以指导我。

CREATE VIEW QADTA.DOH_BASE_NEW1_2(IMLITM,IMITM,IMDSC1,IMGLPT,PROJ_OUTOFSTOCK_DATE,MRTRQT,MRMCU,MRQT,IBPRP4,IBSTKT,QUANT_ON_HAND) AS (SELECT DISTINCT A.IMLITM, A.IMITM,A.IMDSC1, A.IMGLPT , (SELECT MAX(IFNULL( DATE( DAYS( DATE( SUBSTR( DIGITS( DECIMAL(B.MRSTRT + 1900000, 7, 0 ) ), 1, 4 ) CONCAT '-01-01' ) ) + MOD(B.MRSTRT ,1000 ) - 1 ), '1899-12-31' )) FROM PRODDTA.F3413 B WHERE LTRIM(RTRIM(B.MRITM))=LTRIM(RTRIM(A.IMITM)) AND LTRIM(RTRIM(B.MRQT)) IN ('20','30') GROUP BY B.MRITM) AS PROJETED_OUT_OF_STOCK_DATE, (SELECT D.MRTRQT FROM PRODDTA.F3413 D WHERE LTRIM(RTRIM(D.MRITM))=LTRIM(RTRIM(A.IMITM)) AND LTRIM(RTRIM(D.MRQT)) IN ('20','30') AND D.MRSTRT=(SELECT MAX(B.MRSTRT) FROM PRODDTA.F3413 B WHERE LTRIM(RTRIM(B.MRITM))=LTRIM(RTRIM(A.IMITM)) AND LTRIM(RTRIM(B.MRQT)) IN ('20','30') GROUP BY B.MRITM)) AS MRTRQT, C.MRMCU, C.MRQT, E.IBPRP4, E.IBSTKT, (SELECT SUM(F.LIPQOH) FROM PRODDTA.F41021 F WHERE LTRIM(RTRIM(F.LIITM)) = LTRIM(RTRIM(A.IMITM)) AND F.LILOTS NOT IN ('E','R')) AS QUANTITY_ON_HAND FROM PRODDTA.F4101 A, PRODDTA.F3413 C, PRODDTA.F4102 E WHERE A.IMLITM=E.IBLITM AND LTRIM(RTRIM(C.MRQT)) IN ('20','30') AND LTRIM(RTRIM(A.IMITM))= LTRIM(RTRIM(C.MRITM)) );

1 个答案:

答案 0 :(得分:0)

您无法直接在PL / SQL中输入DDL。你可以通过EXECUTE IMMEDIATE来做到这一点,但是:

EXECUTE IMMEDIATE <ddl string>;

请注意,在创建包含单引号的字符串时,您需要将它们转义,这可以通过将它们加倍来完成。

在你的情况下:

EXECUTE IMMEDIATE '
CREATE VIEW QADTA.DOH_BASE_NEW1_2(IMLITM,IMITM,IMDSC1,IMGLPT,PROJ_OUTOFSTOCK_DATE,MRTRQT,MRMCU,MRQT,IBPRP4,IBSTKT,QUANT_ON_HAND) AS (SELECT DISTINCT A.IMLITM, A.IMITM,A.IMDSC1, A.IMGLPT , (SELECT MAX(IFNULL( DATE( DAYS( DATE( SUBSTR( DIGITS( DECIMAL(B.MRSTRT + 1900000, 7, 0 ) ), 1, 4 ) CONCAT ''-01-01'' ) ) + MOD(B.MRSTRT ,1000 ) - 1 ), ''1899-12-31'' )) FROM PRODDTA.F3413 B WHERE LTRIM(RTRIM(B.MRITM))=LTRIM(RTRIM(A.IMITM)) AND LTRIM(RTRIM(B.MRQT)) IN (''20'',''30'') GROUP BY B.MRITM) AS PROJETED_OUT_OF_STOCK_DATE, (SELECT D.MRTRQT FROM PRODDTA.F3413 D WHERE LTRIM(RTRIM(D.MRITM))=LTRIM(RTRIM(A.IMITM)) AND LTRIM(RTRIM(D.MRQT)) IN (''20'',''30'') AND D.MRSTRT=(SELECT MAX(B.MRSTRT) FROM PRODDTA.F3413 B WHERE LTRIM(RTRIM(B.MRITM))=LTRIM(RTRIM(A.IMITM)) AND LTRIM(RTRIM(B.MRQT)) IN (''20'',''30'') GROUP BY B.MRITM)) AS MRTRQT, C.MRMCU, C.MRQT, E.IBPRP4, E.IBSTKT, (SELECT SUM(F.LIPQOH) FROM PRODDTA.F41021 F WHERE LTRIM(RTRIM(F.LIITM)) = LTRIM(RTRIM(A.IMITM)) AND F.LILOTS NOT IN (''E'',''R'')) AS QUANTITY_ON_HAND FROM PRODDTA.F4101 A, PRODDTA.F3413 C, PRODDTA.F4102 E WHERE A.IMLITM=E.IBLITM AND LTRIM(RTRIM(C.MRQT)) IN (''20'',''30'') AND LTRIM(RTRIM(A.IMITM))= LTRIM(RTRIM(C.MRITM)) )'