今天是自己第一次系统的写PL/SQL包(函数,存储过程,包主体),自己总结了一下编写中出现的错误。
函数:
参数:变量名称 in out vachar2|int|
后面直接:return varchar2|int类型 ,不需要长度
使用变量 ,直接使用,不需要单引号和双引号
存储过程:
执行存储过程语法:begin ex.imp;end;
包:
包的接口中定义函数和存储过程,如果函数有返回值,要在函数后面加“return varchar2”返回类型。同时要在包接口中用注释,包主体是不能使用的,
包中的函数可以不使用包.函数调用,直接调用就可以。
包接口 package e is ....end e; 要注意有“;” ,同时包主体里,不能使用“create or replace "字样
自己写的包的接口:

PL/SQL
CREATE OR REPLACE
PACKAGE execImp
IS
/*
* 该表为导入数据的目的表
* 查询从PD中生成的表机构数据,数据表的名称和列名为没有双引号
* 如表名为:label,但在user_tab_cols表中存储的表名为大写
* 2008年10月16日15:42:40 by zping
*/
FUNCTION getTargetCols
(
tbname IN VARCHAR2)
RETURN VARCHAR2;
/*
* 该表为到入数据的数据来源表
* 查询指定表的全部列名,指定表为从SQL SERVER 2005的DTS导入的表
* 导入的表名称有双引号号 如: "label",在user_tab_cols中存储的数据为小写。
* 2008年10月16日15:42:40 by zping
*/
FUNCTION getSourceCols
(
tbname IN VARCHAR2)
RETURN VARCHAR2;
/*
* 对于单个表生成插入数据的SQL
* 2008年10月16日15:42:40 by zping
*/
FUNCTION getExecSQL
(
tbname IN VARCHAR2)
RETURN VARCHAR2;
/*
* 数据中两个表互相导入数据。
* 2008年10月16日15:42:40 by zping
*/
PROCEDURE execImpData;
END execImp;
自己写的包主体

PL/SQL
create or replace PACKAGE body execImp
AS
FUNCTION getSourceCols
(
tbname IN VARCHAR2)
RETURN VARCHAR2
IS
v_cols VARCHAR2(4000);
BEGIN
FOR x IN
(SELECT * FROM user_tab_cols WHERE table_name=lower(tbname)
)
LOOP
v_cols:=v_cols||','||'"'||x.column_name||'"';
END LOOP;
v_cols:= SUBSTR(v_cols, 2, LENGTH(v_cols));
RETURN v_cols;
END;
FUNCTION getTargetCols
(
tbname IN VARCHAR2)
RETURN VARCHAR2
AS
v_SQL VARCHAR2(4000);
BEGIN
FOR x IN
(SELECT * FROM user_tab_cols WHERE table_name= upper(tbname)
)
LOOP
v_SQL:=v_SQL||','||x.column_name;
END LOOP;
v_sql:= SUBSTR(v_sql,2,LENGTH(v_sql));
RETURN v_sql;
END;
PROCEDURE execImpData
AS
v_sql VARCHAR2(4000);
BEGIN
FOR x IN
(SELECT * FROM Ttemp
)
LOOP
v_sql:=getExecSQL(x.tbname);
EXECUTE immediate v_sql;
END LOOP;
COMMIT;
END;
FUNCTION getExecSQL
(
tbname IN VARCHAR2)
RETURN VARCHAR2
AS
v_sql VARCHAR2(4000);
BEGIN
v_sql:='insert into '|| tbname||'('||getTargetCols(tbname)||') ';
v_sql:=v_sql||' select '||getSourceCols(tbname)||' from '||'"'||tbname||'"';
RETURN v_sql;
END;
END execImp;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具