数据库中有一套有命名规则的表,定期会新增
需要利用动态SQL来创建视图 我们可以利用USER_TABLES
表查询出列表
然后做循环字符拼接上UNION ALL
DECLARE
V_SQL VARCHAR2(4000);
BEGIN
V_SQL:='CREATE OR REPLACE VIEW V_DWD_PASSWORD AS ';
FOR I IN(
SELECT ' SELECT T.PLAT,
T.DIRECT,
T.DEVIC,
T.PASSTIME,
T.SPEED,
T.SITENAME
FROM '||TABLE_NAME ||' T UNION ALL ' AS TEXT FROM USER_TABLES T
WHERE T.TABLE_NAME LIKE '%DWD_PASSDATA%' ORDER BY TABLE_NAME) LOOP
V_SQL:=V_SQL||CHR(10)||I.TEXT;
END LOOP;
--最后一个循环的 UNION ALL 需要切割剔除
V_SQL:=SUBSTR(V_SQL,0,LENGTH(V_SQL)-10);
DBMS_OUTPUT.PUT_LINE(V_SQL);
EXECUTE IMMEDIATE V_SQL;
END;
视图还是蛮整齐的
我们封装成存储过程的时候要注意一点权限问题 在之前有说
动态SQL还可以用在多表(根据日期月份生成)上的创建或者查询。
本站文章除注明转载/出处外,均为本站原创,转载前请务必署名,转载请标明出处