Creating a Stored Procedure or Function in an Oracle Database

An IN parameter is a parameter whose value is passed into a stored procedure/function module. The value of an IN parameter is a constant; it can't be changed or reassigned within the module.

An OUT parameter is a parameter whose value is passed out of the stored procedure/function module, back to the calling PL/SQL block. An OUT parameter must be a variable, not a constant. It can be found only on the left-hand side of an assignment in the module. You cannot assign a default value to an OUT parameter outside of the module's body. In other words, an OUT parameter behaves like an uninitialized variable.

An IN/OUT parameter is a parameter that functions as an IN or an OUT parameter or both. The value of the IN/OUT parameter is passed into the stored procedure/function and a new value can be assigned to the parameter and passed out of the module. An IN/OUT parameter must be a variable, not a constant. However, it can be found on both sides of an assignment. In other words, an IN/OUT parameter behaves like an initialized variable.

This example creates stored procedures and functions demonstrating each type of parameter.

See also e281 Calling a Stored Procedure in a Database and e282 Calling a Function in a Database.

    try {
// To create a connection to an Oracle database,
// see e235 Connecting to an Oracle Database
Statement stmt = connection.createStatement();

// Create procedure myproc with no parameters
String procedure =
"CREATE OR REPLACE PROCEDURE myproc IS "
+ "BEGIN "
+ "INSERT INTO oracle_table VALUES('string 1'); "
+ "END;";
stmt.executeUpdate(procedure);

// Create procedure myprocin with an IN parameter named x.
// IN is the default mode for parameter, so both `x VARCHAR' and `x IN VARCHAR' are valid
procedure =
"CREATE OR REPLACE PROCEDURE myprocin(x VARCHAR) IS "
+ "BEGIN "
+ "INSERT INTO oracle_table VALUES(x); "
+ "END;";
stmt.executeUpdate(procedure);

// Create procedure myprocout with an OUT parameter named x
procedure =
"CREATE OR REPLACE PROCEDURE myprocout(x OUT VARCHAR) IS "
+ "BEGIN "
+ "INSERT INTO oracle_table VALUES('string 2'); "
+ "x := 'outvalue'; " // Assign a value to x
+ "END;";
stmt.executeUpdate(procedure);

// Create procedure myprocinout with an IN/OUT parameter named x;
// x functions as an IN parameter and also as an OUT parameter
procedure =
"CREATE OR REPLACE PROCEDURE myprocinout(x IN OUT VARCHAR) IS "
+ "BEGIN "
+ "INSERT INTO oracle_table VALUES(x); " // Use x as IN parameter
+ "x := 'outvalue'; " // Use x as OUT parameter
+ "END;";
stmt.executeUpdate(procedure);

// Create a function named myfunc which returns a VARCHAR value;
// the function has no parameter
String function =
"CREATE OR REPLACE FUNCTION myfunc RETURN VARCHAR IS "
+ "BEGIN "
+ "RETURN 'a returned string'; "
+ "END;";
stmt.executeUpdate(function);

// Create a function named myfuncin which returns a VARCHAR value;
// the function has an IN parameter named x
function =
"CREATE OR REPLACE FUNCTION myfuncin(x VARCHAR) RETURN VARCHAR IS "
+ "BEGIN "
+ "RETURN 'a return string'||x; "
+ "END;";
stmt.executeUpdate(function);

// Create a function named myfuncout which returns a VARCHAR value;
// the function has an OUT parameter named x whose value is
// returned to the calling PL/SQL block when the execution of the function ends
function =
"CREATE OR REPLACE FUNCTION myfuncout(x OUT VARCHAR) RETURN VARCHAR IS "
+ "BEGIN "
+ "x:= 'outvalue'; "
+ "RETURN 'a returned string'; "
+ "END;";
stmt.executeUpdate(function);

// Create a function named myfuncinout that returns a VARCHAR value;
// the function has an IN/OUT parameter named x. As an IN parameter, the value of x is
// defined in the calling PL/SQL block before it is passed in eyfuncinout
// function. As an OUT parameter, the new value of x, `x value||outvalue', is also
// returned to the calling PL/SQL block when the execution of the function ends.
function =
"CREATE OR REPLACE FUNCTION myfuncinout(x IN OUT VARCHAR) RETURN VARCHAR IS "
+ "BEGIN "
+ "x:= x||'outvalue'; "
+ "RETURN 'a returned string'; "
+ "END;";
stmt.executeUpdate(function);
} catch (SQLException e) {
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值