写存储过程时, 经常要INSERT ... SELECT ....或者 UPDATE ...=....,
表的列数少时无所谓, 列数多的时候列出这些列名就很烦人.
把下面的脚本保存到手边, 能大大提高效率.
-- 1.
-- 定义表列对应的变量
-- v_COLNAME TABLE_NAME.COLNAME%TYPE
--
SELECT 'v_' || COLUMN_NAME, TABLE_NAME || '.' || COLUMN_NAME || '%TYPE;'
FROM COLS WHERE TABLE_NAME = '&TNAME'
ORDER BY COLUMN_ID
/
-- 2.
-- 列出表列以及对应的变量
-- 做insert .. select时, 分别copy 左侧和右侧即可
-- (已经有了逗号, 所以不用再每行都添加了, 不过记得把最后一行的逗号去掉)
-- COLNAME, v_COLNAME,
--
SELECT COLUMN_NAME || ', ' , 'v_' || COLUMN_NAME || ', '
FROM COLS WHERE TABLE_NAME = '&TNAME'
ORDER BY COLUMN_ID
/
-- 3.
-- 用于UPDATE语句
-- COLNAME = v_COLNAME,
--
SELECT COLUMN_NAME || ' = ' , 'v_' || COLUMN_NAME || ', '
FROM COLS WHERE TABLE_NAME = '&TNAME'
ORDER BY COLUMN_ID
/
-- 4.
-- 使用CURSOR时, 用于INSERT语句(假设CURSOR的名字叫v_SOURCE_ROW)
-- 用法同2
-- ALIAS.COLNAME, CURSOR.COLNAME,
--
SELECT '&ALIAS' || COLUMN_NAME || ', ' , 'v_SOURCE_ROW.' || COLUMN_NAME || ', '
FROM COLS WHERE TABLE_NAME = '&TNAME'
ORDER BY COLUMN_ID
/
小招技巧系列:
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/32/viewspace-184152/ ,如需转载,请注明出处,否则将追究法律责任。