PL/SQL如何写一个过程返回外部调用过程名称?
时间: 2023-08-10 08:05:30 浏览: 51
可以通过以下的PL/SQL代码实现:
```
CREATE OR REPLACE PROCEDURE get_proc_name(p_name OUT VARCHAR2)
IS
BEGIN
SELECT object_name INTO p_name
FROM user_objects
WHERE object_type = 'PROCEDURE'
AND object_id = (
SELECT caller_object_id
FROM user_objects
WHERE object_name = $$PLSQL_UNIT
AND object_type = 'PROCEDURE'
);
END;
```
该过程将返回调用当前过程的外部过程名称。在调用该过程时,传入一个OUT参数p_name,该参数将被赋值为调用当前过程的外部过程名称。例如:
```
DECLARE
v_proc_name VARCHAR2(100);
BEGIN
get_proc_name(v_proc_name);
DBMS_OUTPUT.PUT_LINE('The calling procedure name is: ' || v_proc_name);
END;
```
输出结果将显示调用当前过程的外部过程名称。
相关问题
pl/sql 调用jar包服务
要在 PL/SQL 中调用 Java 类或方法,需要按照以下步骤进行操作:
1. 使用 CREATE OR REPLACE JAVA SOURCE 创建 Java 源代码,然后使用 loadjava 工具将其加载到数据库中。
2. 创建 Java 存储过程或函数并将其编译为 class 文件。
3. 在 PL/SQL 中创建一个包含外部过程和函数的包,并将其与 Java 存储过程或函数进行映射。
4. 在 PL/SQL 中调用包中的外部过程和函数,以调用 Java 存储过程或函数。
下面是一个简单的示例代码,演示如何在 PL/SQL 中调用 Java 存储过程:
1. 首先,创建一个名为 TestJava 的 Java 类,该类包含一个名为 add 的方法,该方法接受两个整数参数并返回它们的和。
CREATE OR REPLACE JAVA SOURCE NAMED "TestJava" AS
public class TestJava {
public static int add(int a, int b) {
return a + b;
}
};
/
2. 接下来,创建一个名为 addNumbers 的 Java 存储过程,该过程调用 TestJava 类的 add 方法,并将结果存储在一个 OUT 参数中。
CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "AddNumbers" AS
import java.sql.*;
public class AddNumbers {
public static void add(int a, int b, int[] result) throws SQLException {
result[0] = TestJava.add(a, b);
}
};
/
3. 然后,创建一个名为 MyPackage 的 PL/SQL 包,该包包含一个名为 add 的过程,该过程调用 addNumbers 存储过程,并将结果返回给调用者。
CREATE OR REPLACE PACKAGE MyPackage AS
PROCEDURE add(a IN NUMBER, b IN NUMBER, result OUT NUMBER);
END;
/
CREATE OR REPLACE PACKAGE BODY MyPackage AS
PROCEDURE add(a IN NUMBER, b IN NUMBER, result OUT NUMBER) AS LANGUAGE JAVA
NAME 'AddNumbers.add(int, int, int[])';
END;
/
4. 最后,可以在 PL/SQL 中调用 MyPackage 包中的 add 过程,以调用 Java 存储过程,并将结果返回给调用者。
DECLARE
result NUMBER;
BEGIN
MyPackage.add(1, 2, result);
DBMS_OUTPUT.PUT_LINE(result);
END;
/
这就是在 PL/SQL 中调用 Java 存储过程的基本过程。注意,为了使 PL/SQL 能够调用 Java 存储过程,需要在数据库中安装 JDK,并将相关的 JAR 文件加载到数据库中。
sqlplus 执行和外部游标调用存过有什么区别
SQL*Plus 是 Oracle 数据库提供的一种交互式命令行工具,可以用来连接 Oracle 数据库并执行 SQL 语句。而外部游标调用存储过程是一种在 PL/SQL 代码中调用存储过程的方式。
它们之间的区别主要在于使用方式和应用场景:
1. SQL*Plus 是一种命令行工具,需要手动输入 SQL 语句来执行,适合单次或少量 SQL 语句执行,而外部游标调用存储过程是在 PL/SQL 代码中调用存储过程,适合需要在 PL/SQL 中多次调用存储过程的场景。
2. SQL*Plus 可以执行任何标准 SQL 语句,包括 SELECT、INSERT、UPDATE、DELETE 等,而外部游标调用存储过程一般用于执行存储过程,存储过程可以包含多个 SQL 语句和 PL/SQL 代码,可以执行更复杂的数据库操作。
3. SQL*Plus 执行 SQL 语句的结果可以直接输出到控制台或保存到文件中,而外部游标调用存储过程的执行结果需要通过 OUT 参数、游标或表变量等方式返回。
因此,选择使用 SQL*Plus 还是外部游标调用存储过程主要取决于具体的应用场景和需求。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![whl](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)