ITPUB老帖子:小招技巧2: 快速写存储过程
作者: oldwain(http://oldwain.itpub.net)发表于: 2004.09.09 15:12
分类: Oracle
出处: http://oldwain.itpub.net/post/6/1707
---------------------------------------------------------------
写存储过程时, 经常要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老帖子:小招技巧1: 列出小于n的素数
- ITPUB老帖子:小招技巧2: 快速写存储过程
- ITPUB老帖子:小招技巧3: EXCEL文件导入数据库
- 小招技巧4: 整理IMP的INDEXFILE选项生成的脚本
- 小招技巧5: 数学常数
- 小招技巧6: 判断是否存在记录
(需要引用, 请注明出处: http://oldwain.itpub.net)