![]() |
|
Archives of the TeradataForumMessage Posted: Wed, 15 Aug 2007 @ 16:50:06 GMT
Martin, I had developed a stored procedure for view creation based on Table Definition. In this procedure all columns are projected. I think you could use this and enhance as per your needs.
REPLACE PROCEDURE SYSDBA.CREATE_VIEWS (
IN SOURCE_DB VARCHAR(30),
IN TARGET_DB VARCHAR(30),
OUT MSG VARCHAR(32000)
)
--Proc level label
P1:
BEGIN
DECLARE TABLE_NAME VARCHAR(30);
DECLARE SQL_TEXT VARCHAR(10000);
DECLARE CNT INTEGER;
DECLARE COL_NM VARCHAR(10000) ;
DECLARE FIRSTTM CHAR(1) DEFAULT 'Y';
DECLARE EXIT HANDLER FOR SQLEXCEPTION
SET MSG = SQLcode;
-- Check source database exists
SELECT
COUNT(*) INTO :CNT
FROM (SELECT
DatabaseName
FROM DBC.DATABASES
WHERE UPPER(DatabaseName) = UPPER(:SOURCE_DB) ) DT1;
IF CNT = 0 THEN
SET MSG = 'Database '|| SOURCE_DB||' does not exist!';
END IF ;
-- Check target database exists
SELECT COUNT(*) INTO :CNT
FROM (SELECT
DatabaseName
FROM DBC.DATABASES
WHERE UPPER(DatabaseName) = UPPER(:TARGET_DB) ) DT1;
IF CNT = 0 THEN
SET MSG = 'Database '|| TARGET_DB||' does not exist!';
LEAVE P1;
END IF ;
L1:
FOR L1GETTABLES AS GETINDEX CURSOR FOR
SELECT DISTINCT
TBL.DatabaseName
,TBL.TableName
FROM
(SELECT
T.TableName
,T.DatabaseName
,C.ColumnName
,ROW_NUMBER() OVER(PARTITION BY T.DatabaseName, T.TableName ORDER BY
ColumnID ASC) AS ColumnId
FROM DBC.COLUMNS C JOIN DBC.TABLES T
ON T.DatabaseName = C.DatabaseName
AND T.TableName = C.TableName
WHERE T.DatabaseName= :SOURCE_DB
AND T.TableName IN ('INSTAL_CLAIM_FACT')
AND T.TableKind='T' ) TBL
LEFT JOIN
(SELECT
V.TableName
,C.ColumnName
,ROW_NUMBER() OVER(PARTITION BY V.DatabaseName, V.TableName ORDER BY
ColumnID ASC) AS ColumnId
FROM DBC.COLUMNS C JOIN DBC.TABLES V
ON V.DatabaseName = C.DatabaseName
AND V.TableName = C.TableName
WHERE V.DatabaseName= :TARGET_DB
AND V.TableKind='V') VW
ON TBL.TableName = VW.TableName
AND TBL.ColumnName = VW.ColumnName
AND TBL.ColumnID = VW.ColumnID
WHERE VW.ColumnName IS NULL
AND Tbl.TableName IN ('INSTAL_CLAIM_FACT')
ORDER BY 1, TBL.ColumnID
DO
SET TABLE_NAME = L1GETTABLES.TableName;
SET FIRSTTM ='Y' ;
SET SQL_TEXT = ' REPLACE VIEW ' || TARGET_DB || '.' || TABLE_NAME || ' AS ' || X'0D';
SET SQL_TEXT = SQL_TEXT || ' LOCKING ROW FOR ACCESS ' ||X'0D' ;
SET SQL_TEXT = SQL_TEXT || 'SELECT ' || X'0D';
L2:
FOR L2GETCOLUMNS AS GETINDEX CURSOR FOR
SELECT
ROW_NUMBER() OVER(PARTITION BY DatabaseName, TableName ORDER BY ColumnId ASC) Seq
,COUNT(*) OVER(PARTITION BY DatabaseName, TableName ORDER BY ColumnId ASC) Cnt
,CASE WHEN Seq < Cnt THEN TRIM(ColumnName) || ','
ELSE TRIM(ColumnName) End AS C2
FROM DBC.COLUMNS
WHERE DatabaseName = :SOURCE_DB
AND TableName = :TABLE_NAME
ORDER BY COLUMNID
DO
SET COL_NM = L2GETCOLUMNS.C2 || X'0D';
END FOR L2;
SET SQL_TEXT =SQL_TEXT || COL_NM;
SET SQL_TEXT = SQL_TEXT || ' From ' || TRIM(SOURCE_DB ) || '.' ||
TRIM(TABLE_NAME) || ';' || X'00';
CALL DBC.SYSEXECSQL (:SQL_TEXT);
END FOR L1;
SET SQL_TEXT = 'GRANT SELECT ON ' || TRIM(SOURCE_DB ) || ' TO ' ||
TRIM(TARGET_DB) || ' WITH GRANT OPTION;';
CALL DBC.SYSEXECSQL (:SQL_TEXT);
SET SQL_TEXT = 'GRANT INSERT ON ' || TRIM(SOURCE_DB ) || ' TO ' ||
TRIM(TARGET_DB) || ' WITH GRANT OPTION;';
CALL DBC.SYSEXECSQL (:SQL_TEXT);
SET SQL_TEXT = 'GRANT DELETE ON ' || TRIM(SOURCE_DB ) || ' TO ' ||
TRIM(TARGET_DB) || ' WITH GRANT OPTION;';
CALL DBC.SYSEXECSQL (:SQL_TEXT);
SET MSG = ' Views creation process has successfully completed';
END;
Thanks, Vinay Bagare
| ||||||||||||||||||||||||||||||||||||||||||||||||
| | ||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||
| Copyright 2016 - All Rights Reserved | ||||||||||||||||||||||||||||||||||||||||||||||||
| Last Modified: 15 Jun 2023 | ||||||||||||||||||||||||||||||||||||||||||||||||