当前位置:首页 » 编程语言 » plsql自定义函数
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

plsql自定义函数

发布时间: 2022-07-30 18:58:02

㈠ 在pl/sql中 调用函数或者过程的有的时候 declare 变量 begin end,有的时候直接begin end 哪位解释一下啊

函数或过程需要变量做参数时,就需要declare定义变量,否则就不需要declare

㈡ ORACLE 存储过程是什么 它的用处,好处是什么概念性的东西多点。。

定义:存储过程(Stored Procere )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。
存储过程是由流控制和SQL 语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即可。在ORACLE 中,若干个有联系的过程可以组合在一起构成程序包。
优点:
1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2.当对数据库进行复杂操作时(如对多个表进行Update、Insert、Query、Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3.存储过程可以重复使用,可减少数据库开发人员的工作量。
4.安全性高,可设定只有某用户才具有对指定存储过程的使用权。

简单说,你在你的机器上写了个存储过程,这个存储过程像那些表里的数据一样被放在遥远的数据库服务器当中,但是它又是可执行的代码,其他能连到数据库服务器的用户,可以调用你写的存储过程
它的作用是隐藏细节,就是说,你写的存储过程代码可能很复杂,但是其他人调用它却很简单,不用具体知道它是如何做的,且一次能完成多个指令

oracle有系统存储过程和自定义存储过程2种存储过程。
系统存储过程就是由oracle预先提供的一组完成特定功能的存储过程,安装完oracle就有了。
自定义存储过程就是存在oracle数据库里由一组plsql语句组成的自定义过程(procere)。它可以供其它oracle自定义存储过程、自定义函数和job调用或者由客户端程序调用。

㈢ 问一个问题。plsql和mysql,sql server

plsql只用于oracle,plsql是oracle的第三方软件,其他数据库不可用。而且plsql不是语言,只是一个工具。
mysql,oracle,sqlserver对应的语言都叫sql语言,但是对于不同数据库,语法略有不同,内置函数也略有区别,存储过程,自定义函数等等语法也不同,但是学了其中一个,对于学其他的来说,很有帮助,这三个来说,基本学任意一个就可以,其他的到时候灵活变换,记住函数什么的也就可以了。

㈣ 在plsql块自定义函数中如果包含update,delete语句,为什么不必commit

存储函数的语法: create function 函数([函数参数[,….]]) Returns 返回类型 Begin If( Return (返回的数据) Else Return (返回的数据) end if; end; 例如: create function count_news(hits int) returns int 与存储过程返回参数不同的是存储函...

㈤ plsqldev7登录后不知道在哪里写sql语句

创建的函数,程序可以调用,完成某些功能。也就是自定义函数。与oracle本身的函数一样。只是更灵活了

㈥ ORA-06502:PLSQL:数值或值错误:字符串缓冲区太小

目测,这个不用自定义函数吧,oracle中有现成的

selectwm_concat(tbi_memo)FROMhi_tab_bigtextWHEREtbi_flag=参数

这种转完是逗号分隔的,你再用replace把逗号去掉就可以啊

㈦ pl/sql自定义函数如何返回多个值

表中也是要参数的啊,光给表了,人家怎么知道你表里要返回什么啊~
RETURN @t TABLE【(f char(20),a char(20),b char(6),c datetime, d char(4) )】
【】里面的是你要返回表中的参数
@t是你表名的参数
下面的insert你知道么?就是读入这些参数到那个表中
然后返回输出~

㈧ plsql自定义函数 不需要返回值怎样写

游标变量
通过游标,我们可以取得返回结果集(往往是select语句查询的结果集)中的任何一行数据,从而提高共享的效率。
参照变量refcursor使用:
定义游标:
1.定义一个游标类型:
Type自定义游标名isrefcursor;2.定义一个游标变量:变量名自定义游标名;
打开游标:
Open游标变量forselect语句;
取出当前游标指向的行:
Fetch游标变量into其他变量;
判断游标是否指向记录最后:
游标变量%notfound;关闭游标:Close游标名。

第二种:
var变量名变量类型
call函数名(参数值,...)into:变量名;print变量名第三种:
select函数名(参数,...)fromal;

案例:请编写一个函数,可以接收用户名并返回该用户的年薪。createfunctioninName_outSal(v_in_namevarchar2)returnnumberis
v_annual_salnumber;begin
select(sal+nvl(comm,0))*13intov_annual_salfromempwhereename=v_in_name;returnv_annual_sal;end;/
函数和过程的区别:
1、函数必须有返回值,而过程可以没有;2、函数和过程在java中调用的方式不一样;
java中调用oracle函数可以在select语句中直接调用,如:select自定义的函数名(参数)from表;
过程则是使用CallableStatement完成调用。
Java调用函数方式:packagecom.test;
importjava.sql.ResultSet;importjava.sql.SQLException;publicclassTestFunction{
//如何在java中调用自己编写的函数
publicstaticvoidmain(String[]args){
Stringsql="selectinName_outSal('KING')annualfromal";ResultSetrs=SQLHelper.executeQuery(sql,null);try{
if(rs.next()){
System.out.println(rs.getDouble("annual"));//此处可以用数字或别名接收返回值}
}catch(SQLExceptione){e.printStackTrace();}finally{
if(rs!=null){try{
rs.close();
}catch(SQLExceptione){e.printStackTrace();}}
rs=null;}}

Java调用过程方式:packagecom.test;
importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.DriverManager;publicclassTestProcere{
//调用oracle中update_sal存储过程
publicstaticvoidmain(String[]args){Connectionct=null;
CallableStatementcs=null;try{
//加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");//得到连接
ct=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger");
//创建CallableStatement接口引用对象
cs=ct.prepareCall("{callupdate_sal(?,?)}");//给?赋值
cs.setString(1,"BOSS");cs.setFloat(2,8888f);//执行我们的语句cs.execute();//提交
ct.commit();
}catch(Exceptione){e.printStackTrace();}finally{try{
if(cs!=null){cs.close();}
if(ct!=null){ct.close();}
}catch(Exceptione2){e2.printStackTrace();}
cs=null;ct=null;}

}}
pl/sql知识--包(扩张了解,自己看)
包用于在逻辑上组合过程和函数,它由包规范和包体两部分组成。1、我们可以使用createpackage命令来创建包:建包基本语法:
create[orreplace]package包名is
procere过程名(变量名变量类型,...);
function函数名(变量名变量类型,...)return数据类型;end;/
包的规范:只包含了过程和函数的说明,但是没有过程和函数的实现代码。包体:用于实现包规范的过程和函数。
请编写一个包,该包有一个过程,该过程可以接收用户名和新的薪水。(将来用于通过用户去更新薪水)还有一个函数,该函数可以接收一个用户名(将来要实现得到该用户的年薪是多少)
createpackageemp_packageis
procereupdate_sal(v_in_enamevarchar2,v_in_newsalnumber);functioninName_outSal(v_in_namevarchar2)returnnumber;end;
2、建立包体可以使用createpackagebody命令建立包体基本语法:
createorreplacepackagebody包名is
procere过程名(变量名变量类型,...)is--声明变量;begin
--执行语句;exception
when异常名then--异常处理;end;
function函数名(变量名变量类型,...)return数据类型is--声明变量;begin
--执行语句;end;end;/
案例:请实现前面定义的包中的过程和函数。

gin
select(sal+nvl(comm,0))*13intov_annual_salfromempwhere
ename=v_in_name;
returnv_annual_sal;end;end;/
细节说明:
1、包体中要现实的函数或过程,应当在包规范中声明;
2、在调用包中的某个函数或过程的时候,需要使用对应的方法才可以调用。3、如何调用包的过程或函数
当调用包的过程或是函数时,在过程和函数前需要带有包名,如果要访问其它方案的包,还需要在包名前加方案名。调用基本方法:
exec方案名.包名.过程名(参数,...);call方案名.包名.函数名(参数,...);
也可以直接用select方案名.包名.函数名(参数,...)fromal;

㈨ plsql中有没有三目表达式

这个需要通过宏表函数EVALUATE来实现,首先需要自定义名称。
如果数据在A列,那么在B列自定义名称,按Ctrl+F3键,在“定义名称框”中选择“新建”,然后输入名称为“结果”,数据来源输入=EVALUATE(A1),确定。
然后在B1单元格中输入=结果,并向下填充公式,即可得到A1表达式的结果。

㈩ Oracle 数据库 关于PLSQL function 函数问题

可以自定义type,然后通过管道函数pipe返回type类型。