解决方案 »
- OracleOraDb11g_home1TNSListener
- 请问用pl/sql导出ORACLE数据库生成EXCEL文件,末尾多了个特殊字符如何去掉
- 一个sql查询问题
- 准备学Oracle 应该准备什么?
- access 中的嵌套查询在oracle里怎么实现?
- 用pl/sql developer连数据库的时候出现了“ORA-12154:TNS:无法处理服务名”,该怎么办?
- 启动OracleOraHome90ManagementServer服务时总出错
- 急问:TNS-12571 TNS:packet writer failure
- 请问HR 用户的密码?
- 询问一条SQL查询
- 代发地方更符合
- 在过程中添加子过程,在子过程中判断
下面是一个 OUT 与 IN OUT 参数使用的例子。SQL> CREATE OR REPLACE PROCEDURE HelloWorld2 (
2 p_user_name IN VARCHAR2,
3 p_out_val OUT VARCHAR2,
4 p_inout_val IN OUT VARCHAR2
5 ) AS
6 BEGIN
7 dbms_output.put_line('Hello ' || p_user_name || p_inout_val || '!');
8 p_out_val := 'A';
9 p_inout_val := 'B';
10 END HelloWorld2;
11 /Procedure created.SQL> DECLARE
2 p_outval VARCHAR2(10);
3 p_inoutval VARCHAR2(10) := '~Hi~';
4 BEGIN
5 HelloWorld2('Edward', p_outval, p_inoutval);
6
7 dbms_output.put_line('p_outval=' || p_outval);
8 dbms_output.put_line('p_inoutval=' || p_inoutval);
9 END;
10 /
Hello Edward~Hi~!
p_outval=A
p_inoutval=BPL/SQL procedure successfully completed.
一般来说 ,函数 获取return的值
mybatis配置statementType="CALLABLE" 然后{call 存储过程}
实现JDBC的CallableStatement接口,调用存储过程
另:有OUT参数的,不能通过select的形式调用
给你个例子吧
创建:
CREATE or replace FUNCTION fun_test (st_name IN out VARCHAR2)
RETURN VARCHAR2
IS
BEGIN st_name := st_name || st_name;
RETURN st_name || '123';
END fun_test;
调用:
DECLARE
temp_name VARCHAR2 (20) := '111';
tmp VARCHAR2 (20);
BEGIN
tmp := fun_test (temp_name);
DBMS_OUTPUT.put_line (temp_name);
DBMS_OUTPUT.put_line (tmp);
END;
结果:temp_name=111111
tmp=111111123
如果使用select形式的话,会报错:
2)参照4楼,statementType="CALLABLE",然后{call 存储过程名(参数)}
可以在以面的场合使用;
select fn(p1,p2..)
var := fn(p1,2)
update t set c = fn(111) where ...2) procedure
不能和别的语句掺在一起,但是 proc 有自己的特点,比如 proc 内部可以使用 DML 语句等等。
调用Function的话,直接在查询语句中当其时“一个字段一样”运行就可以了。
调用Procedure的话:<parameterMap id="budgetMonitorUsedParam" class="map">
<parameter property="p_autoprocessseq" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"></parameter>
<parameter property="p_business_book" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"></parameter>
<parameter property="p_msg" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"></parameter>
<parameter property="p_flag" jdbcType="VARCHAR" javaType="java.lang.String" mode="OUT"></parameter>
</parameterMap>
<procedure id="budgetMonitorUsed" parameterMap="budgetMonitorUsedParam">
<![CDATA[
{ call 数据库属主.p_your_procedure_name(?,?,?,?)}
]]>
</procedure>
2).在程序开发中,比如用Mybatis与数据库交互,在哪里调用function与存储过程?怎么调用?---就是你Mybatis触发的时候调用