志在指尖
用双手敲打未来

oracle函数(oracle函数怎么写)

oracle函数

在oracle中,函数又被称PL/SQL子程序,是作为数据库对象存储在oracle数据库中的;函数会对传递进来的参数进行处理,并回来一个处理结果,也就是回来一个值。oracle函数可分为两类:体系函数和用户自界说函数。
本教程操作环境:Windows7体系、Oracle11g版、DellG3电脑。
Oracle函数的界说
函数是作为数据库对象存储在oracle数据库中,函数又被称为PL/SQL子程序。
函数会对传递进来的参数进行处理,并回来一个处理结果,也就是回来一个值。一般用于回来特定的数据。
oracle函数可分为两类:体系函数和用户自界说函数。oracle

oracle函数怎么写

–创建表
DECLARE
CNTINTEGER;
BEGIN
SELECTCOUNT(0)
INTOCNT
FROMUSER_ALL_TABLES
WHERETABLE_NAME=’CMSTEMP’;
IFCNT=0THEN
EXECUTEIMMEDIATE’CREATETABLECMSTEMP(
IDINTEGERPRIMARYKEY,
NAMEVARCHAR2(32),
AGEINTEGER,
ADDRESSVARCHAR2(64)
)’;
ENDIF;
END;
–创建type
DECLARE
CNTINTEGER;
BEGIN
SELECTCOUNT(0)INTOCNTFROMUSER_TYPESWHERETYPE_NAME=’CMSTEMPTYPE’;
IFCNT=0THEN
EXECUTEIMMEDIATE’CREATEORREPLACETYPECMSTEMPTYPEASOBJECT(
IDINTEGER,
NAMEVARCHAR2(32),
AGEINTEGER,
ADDRESSVARCHAR2(64)
)’;
ENDIF;
END;
–创建type表
DECLARE
CNTINTEGER;
BEGIN
SELECTCOUNT(0)INTOCNTFROMUSER_TYPESWHERETYPE_NAME=’CMSTEMPTYPETABLE’;
IFCNT=0THEN
EXECUTEIMMEDIATE’
CREATEORREPLACETYPECMSTEMPTYPETABLEASTABLEOFCMSTEMPTYPE’;
ENDIF;
END;
–创建临时表
DECLARE
CNTINTEGER;
BEGIN
SELECTCOUNT(0)
INTOCNT
FROMUSER_ALL_TABLES
WHERETABLE_NAME=’CMSTEMPGLO’;
IFCNT=0THEN
EXECUTEIMMEDIATE’CREATEGLOBALTEMPORARYTABLECMSTEMPGLO(
IDINTEGERPRIMARYKEY,
NAMEVARCHAR2(32),
AGEINTEGER,
ADDRESSVARCHAR2(64)
)
ONCOMMITPRESERVEROWS’;
ENDIF;
END;
–创建包
CREATEORREPLACEPACKAGEGLOBALPACKGE
AS
TYPECUR1ISREFCURSOR;
END;
第一种方式使用临时表
CREATEORREPLACEFUNCTIONNS_CMS_GETCMSTEM(NAMEVARCHAR2)
RETURNCMSTEMPTYPETABLE
PIPELINEDIS
PRAGMAAUTONOMOUS_TRANSACTION;
V_NAMEVARCHAR2(32);
V_AGEINTEGER;
V_ADDRESSVARCHAR2(64);
V_IDINTEGER;
RWSCMSTEMPTYPE:=CMSTEMPTYPE(NULL,NULL,NULL,NULL);
V_CURGLOBALPACKGE.CUR1;
BEGIN
EXECUTEIMMEDIATE’TRUNCATETABLECMSTEMPGLO’;
FORRECIN(SELECT*FROMCMSTEMP)LOOP
V_NAME:=REC.NAME;
V_AGE:=REC.AGE;
V_ID:=REC.ID;
V_ADDRESS:=REC.ADDRESS;
INSERTINTOCMSTEMPGLO
(ID,ADDRESS,AGE,NAME)
VALUES
(V_ID,V_ADDRESS,V_AGE,V_NAME);
DBMS_OUTPUT.PUT_LINE(‘11111111111’);
ENDLOOP;
COMMIT;
OPENV_CURFOR
SELECT*FROMCMSTEMPGLO;
LOOP
FETCHV_CUR
INTORWS.ID,RWS.NAME,RWS.AGE,RWS.ADDRESS;
EXITWHENV_CUR%NOTFOUND;
PIPEROW(RWS);
ENDLOOP;
CLOSEV_CUR;
END;
第二种方式不适用临时表
CREATEORREPLACEFUNCTIONNS_CMS_GETCMSTEMP(NAMEVARCHAR2)
RETURNCMSTEMPTYPETABLE
PIPELINEDAS
PRAGMAAUTONOMOUS_TRANSACTION;
V_CURGLOBALPACKGE.CUR1;
V_NAMEVARCHAR2(32);
V_ADDRESSVARCHAR2(64);
V_AGEINTEGER;
V_IDINTEGER;
RET_ROWCMSTEMPTYPE:=CMSTEMPTYPE(NULL,NULL,NULL,NULL);
RET_TABLECMSTEMPTYPETABLE:=CMSTEMPTYPETABLE();–这里必须这样写
BEGIN
FORRECIN(SELECT*FROMCMSTEMP)LOOP
RET_TABLE.EXTEND;
RET_ROW.ID:=REC.ID;
RET_ROW.AGE:=REC.AGE;
RET_ROW.NAME:=REC.NAME;
RET_ROW.ADDRESS:=REC.ADDRESS;
RET_TABLE(RET_TABLE.COUNT):=RET_ROW;
ENDLOOP;
COMMIT;
openV_CURfor
select*fromtable(RET_TABLE);
loop
fetchV_CURintoRET_ROW.ID,RET_ROW.NAME,RET_ROW.AGE,RET_ROW.ADDRESS;–顺序要和type对象里定义的顺序保持一致
exitwhenV_CUR%notfound;
piperow(RET_ROW);
endloop;
closev_cur;
END;
插入数据
iinteger;
begin
foriin1..100loop
insertintocmstempvalues(i,’zhangsan’||i,1+i,’王府大街’||i);
commit;
endloop;
end;
查询sql

未经允许不得转载:IT技术网站 » oracle函数(oracle函数怎么写)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载