如何在 Oracle 中定义 PL/SQL 中的全局变量?
How to define global variable in PL/SQL in Oracle?
如何在 PL/SQL 中定义一个在所有函数/过程/包中都可用的全局变量?
是否可以定义?
或者有其他替代方法吗?
使用包规范中的变量创建新包,如下所示:
CREATE PACKAGE my_public_package IS
my_var Number;
END;
现在您可以在任何代码中访问变量并访问 my_public_package
...
my_public_package.my_var := 10;
...
How can I define a global variable in PL/SQL which will be available in all functions / procedures / packages?
你可以使用 Global Application Context variable.
An application context is a set of name-value pairs that Oracle
Database stores in memory. The application context has a label called
a namespace, for example, empno_ctx for an application context that
retrieves employee IDs. Inside the context are the name-value pairs
(an associative array): the name points to a location in memory that
holds the value. An application can use the application context to
access session information about a user, such as the user ID or other
user-specific information, or a client ID, and then securely pass this
data to the database. You can then use this information to either
permit or prevent the user from accessing data through the
application. You can use application contexts to authenticate both
database and nondatabase users.
如果您希望 v 变量值在访问变量 的任何 PL/SQL 对象的所有会话中都应该相同,则使用 数据库 table 存储值。
例如,T.Kyte建议here
CREATE TABLE global_value(x INT);
INSERT INTO global_value VALUES (0);
COMMIT;
CREATE OR replace PACKAGE get_global
AS
FUNCTION Val
RETURN NUMBER;
PROCEDURE set_val (
p_x IN NUMBER );
END;
/
CREATE OR replace PACKAGE BODY get_global
AS
FUNCTION Val
RETURN NUMBER
AS
l_x NUMBER;
BEGIN
SELECT x
INTO l_x
FROM global_value;
RETURN l_x;
END;
PROCEDURE Set_val(p_x IN NUMBER)
AS
PRAGMA autonomous_transaction;
BEGIN
UPDATE global_value
SET x = p_x;
COMMIT;
END;
END;
/
variable_name [CONSTANT] datatype [NOT NULL] [:= | DEFAULT initial_value]
如何在 PL/SQL 中定义一个在所有函数/过程/包中都可用的全局变量?
是否可以定义?
或者有其他替代方法吗?
使用包规范中的变量创建新包,如下所示:
CREATE PACKAGE my_public_package IS
my_var Number;
END;
现在您可以在任何代码中访问变量并访问 my_public_package
...
my_public_package.my_var := 10;
...
How can I define a global variable in PL/SQL which will be available in all functions / procedures / packages?
你可以使用 Global Application Context variable.
An application context is a set of name-value pairs that Oracle Database stores in memory. The application context has a label called a namespace, for example, empno_ctx for an application context that retrieves employee IDs. Inside the context are the name-value pairs (an associative array): the name points to a location in memory that holds the value. An application can use the application context to access session information about a user, such as the user ID or other user-specific information, or a client ID, and then securely pass this data to the database. You can then use this information to either permit or prevent the user from accessing data through the application. You can use application contexts to authenticate both database and nondatabase users.
如果您希望 v 变量值在访问变量 的任何 PL/SQL 对象的所有会话中都应该相同,则使用 数据库 table 存储值。
例如,T.Kyte建议here
CREATE TABLE global_value(x INT);
INSERT INTO global_value VALUES (0);
COMMIT;
CREATE OR replace PACKAGE get_global
AS
FUNCTION Val
RETURN NUMBER;
PROCEDURE set_val (
p_x IN NUMBER );
END;
/
CREATE OR replace PACKAGE BODY get_global
AS
FUNCTION Val
RETURN NUMBER
AS
l_x NUMBER;
BEGIN
SELECT x
INTO l_x
FROM global_value;
RETURN l_x;
END;
PROCEDURE Set_val(p_x IN NUMBER)
AS
PRAGMA autonomous_transaction;
BEGIN
UPDATE global_value
SET x = p_x;
COMMIT;
END;
END;
/
variable_name [CONSTANT] datatype [NOT NULL] [:= | DEFAULT initial_value]