《Oracle PL/SQL开发指南》学习笔记28——源码调试——PL/SQL基础知识(第十一部分——函数和过程)

 

1. 存储函数的原型

CREATE OR REPLACE [{EDITIONABLE | NONEDITIONABLE}]
[schema.] FUNCTION function_name
( parameter [IN][OUT] [NOCOPY] {sql_data_type | plsql_data_type}
[,parameter [IN][OUT] [NOCOPY] {sql_data_type | plsql_data_type}]
[, ... ] )
RETURN {sql_data_type | plsql_data_type}
[ACCESSIBLE BY
( [{FUNCTION | PROCEDURE | PACKAGE | TYPE}] [schema.]unit_name)
[,[{FUNCTION | PROCEDURE | PACKAGE | TYPE}] [schema.]unit_name)]
[,... ]]])
[AUTHID [DEFINER | CURRENT_USER]]
[DETERMINISTIC | PARALLEL_ENABLED]
[PIPELINED]
[RESULT_CACHE [RELIES ON table_name]] IS
declaration_statements;
BEGIN
execution_statements
RETURN variable;
[EXCEPTION]
exception_handling_statements
END [function_name];

可以从伪表DUAL查询返回值为SQL数据类型(或PL/SQL类型)的函数:

SELECT some_function[(actual_parameter [, ...])]
FROM dual;

SELECT some_function[(formal_parameter => actual_parameter)]
FROM dual;

可以使用CALL语句将函数的返回值捕获到一个绑定变量中:

CALL some_function[(actual_parameter [, ...])]
INTO some_session_bind_variable;

示例:

-- Queries working with the function.

SQL> SELECT join_strings('Hello','World') FROM dual;

JOIN_STRINGS('HELLO','WORLD')
--------------------------------------------------------------------------------
Hello World.

SQL> SELECT join_strings('Hello','World') JOINED_STRING FROM dual;

JOINED_STRING
--------------------
Hello World.

SQL> VARIABLE session_var VARCHAR2(30);
SQL> CALL join_strings('Hello','World') INTO :session_var;

Call completed.

SQL> SELECT :session_var FROM dual;

:SESSION_VAR
--------------------
Hello World.

2. 存储过程的原型

CREATE OR REPLACE [{EDITIONABLE | NONEDITIONABLE}]
[schema.] PROCEDURE procedure_name
( parameter [IN][OUT] [NOCOPY] {sql_data_type | plsql_data_type}
[,parameter [IN][OUT] [NOCOPY] {sql_data_type | plsql_data_type}]
[, ... ] )
[ACCESSIBLE BY
( [{FUNCTION | PROCEDURE | PACKAGE | TYPE}] [schema.]unit_name)
[,[{FUNCTION | PROCEDURE | PACKAGE | TYPE}] [schema.]unit_name)]
[,... ]]])
[ AUTHID DEFINER | CURRENT_USER ] IS
declaration_statements
BEGIN
execution_statements;
[EXCEPTION]
exception_handling_statements
END procedure_name;

示例:

SQL> ed
Wrote file afiedt.buf

  1  -- Create or replace formatting procedure.
  2  CREATE OR REPLACE PROCEDURE format_string
  3  ( string_in IN OUT VARCHAR2 ) IS
  4  BEGIN
  5    string_in := '['||string_in||']';
  6* END;
SQL> /

Procedure created.
SQL> VARIABLE session_var VARCHAR2(30)
SQL> CALL format_string(:session_var);

Call completed.

SQL> CALL join_strings('Hello','World') INTO :session_var;

Call completed.

SQL> CALL format_string(:session_var);

Call completed.

SQL> SELECT :session_var FROM dual;

:SESSION_VAR
--------------------
[Hello World.]

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值