我是这个概念的新手。我想在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)) );
答案 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)) )'