如何在 PL/SQL 中使用包内的过程

     2023-03-31     185

关键词:

【中文标题】如何在 PL/SQL 中使用包内的过程【英文标题】:How to use procedure within package in PL/SQL 【发布时间】:2020-10-21 10:27:09 【问题描述】:

如何创建一个包含过程的包?程序将指定和激励作为输入,并通过添加给定指定的激励来更新员工工资。显示已更新的员工记录数,例如“更新了 3 条员工记录”。 我有一个表 EMPLOYEE,包含 EMP_ID、EMP_NAME、SALARY 和 DESIGNATION。 给定的功能要求是:

Package name as  EMP_DESIGNATION, and
Procedure signature:
EMP_DETAILS(design employee.designation%TYPE, incentive number);

我尝试的代码是-

set serveroutput on;
CREATE OR REPLACE PACKAGE EMP_DESIGNATION AS
 PROCEDURE EMP_DETAILS(
design employee.designation%TYPE,
incentive NUMBER) IS
BEGIN
UPDATE employee SET employee.salary = employee.salary + incentive
WHERE employee.designation = design;
dbms_output.put_line(SQL%ROWCOUNT || ' employee record(s) are updated');
END EMP_DESIGNATION;
END;
/

输出是-

Warning: Package Body created with compilation errors.
BEGIN
*
ERROR at line 1:
ORA-04063: package body "P10017.EMP_DESIGNATION" has errors
ORA-06508: PL/SQL: could not find program unit being called:
"P10017.EMP_DESIGNATION"
ORA-06512: at line 2

如何解决这个错误?请帮忙。先感谢您。 PL/SQL:语句被忽略

【问题讨论】:

要找出受 DML 语句影响的行数,请检查 SQL%ROWCOUNT 的值 【参考方案1】:

你必须先创建一个包规范,然后是它的body。像这样的:

SQL> CREATE OR REPLACE PACKAGE emp_designation
  2  AS
  3     PROCEDURE emp_details (design employee.designation%TYPE, incentive NUMBER);
  4  END emp_designation;
  5  /

Package created.

SQL>
SQL> CREATE OR REPLACE PACKAGE BODY emp_designation
  2  AS
  3     PROCEDURE emp_details (design employee.designation%TYPE, incentive NUMBER)
  4     IS
  5     BEGIN
  6        UPDATE employee
  7           SET employee.salary = employee.salary + incentive
  8         WHERE employee.designation = design;
  9
 10        DBMS_OUTPUT.put_line (
 11           SQL%ROWCOUNT || ' employee record(s) are updated');
 12     END emp_details;
 13  END emp_designation;
 14  /

Package body created.

SQL>

【讨论】:

在进行更改后,代码仍然会引发错误,我已经提到过,通过在上面的问题中对其进行编辑。 您所做的更改不正确。再看看我的代码。不能先 END 包体,再 END 过程。 哦,所以我不应该结束开始,因为我们正在结束程序和包? 必须结束所有开始的事情,但你必须注意你要结束的事情。

如何在 pl/sql 过程中使用游标返回多行和多列?

】如何在pl/sql过程中使用游标返回多行和多列?【英文标题】:Howtoreturnmultiplerowswithmultiplecolumnsusingcursorinpl/sqlprocedure?【发布时间】:2018-08-1413:53:32【问题描述】:我正在尝试为在特定日期之间注册课程的返回用户编写一个过程... 查看详情

如何使用正则表达式或任何其他方法在 PL/SQL 中提取单引号内的字符串 [重复]

】如何使用正则表达式或任何其他方法在PL/SQL中提取单引号内的字符串[重复]【英文标题】:HowtoextractstringinsidesinglequotesinPL/SQLusingregexoranyothermethod[duplicate]【发布时间】:2018-09-1112:30:20【问题描述】:我需要在PL/SQL中的单引号内... 查看详情

如何使用 PL/SQL 中的过程在表中插入多个值?

】如何使用PL/SQL中的过程在表中插入多个值?【英文标题】:HowtoinsertmultiplevaluesintableusingprocedureinPL/SQL?【发布时间】:2017-10-3017:35:51【问题描述】:在运行以下代码时,我将其作为输出:输出:-ORA-00001:违反唯一约束(KART.SYS_C00... 查看详情

如何在pl / sql中同时在不同会话中执行存储过程

】如何在pl/sql中同时在不同会话中执行存储过程【英文标题】:Howtoexecuteastoredprocedureinadifferentsessioninsametimeinpl/sql【发布时间】:2016-05-1206:01:58【问题描述】:PL/SQL中是否有可能调用多个会话并同时在多个会话中运行一个过程。... 查看详情

如何在 PL/SQL 中查看存储过程的代码

】如何在PL/SQL中查看存储过程的代码【英文标题】:HowtoseecodeofastoredProcedureinPL/SQL【发布时间】:2014-05-2117:33:09【问题描述】:我在pl/sqloracle中做了多个程序,使用APEX。我想查看pl/sqlcode我的程序。我需要一个查询来执行此操作... 查看详情

如何在 PL / SQL 中读取另一个游标内的游标

】如何在PL/SQL中读取另一个游标内的游标【英文标题】:HowtoreadacursorinsideanothercursorinPL/SQL【发布时间】:2018-10-0316:16:51【问题描述】:我必须完成一个离开公司的人所做的开发,我试图理解一个内置在另一个光标内的光标..像这... 查看详情

如何在 Pl/SQL 中正确创建一个过程,在该过程中我创建一个表并使用一个游标

】如何在Pl/SQL中正确创建一个过程,在该过程中我创建一个表并使用一个游标【英文标题】:HowtocorrectlymakeaprocedureinPl/SQLinwhichIcreateaTABLEanduseaCURSOR【发布时间】:2020-09-3014:59:04【问题描述】:我要做的任务是“创建一个程序,将... 查看详情

如何使用 pl sql 过程从结构仅在运行时知道的 oracle 表中动态获取数据?

】如何使用plsql过程从结构仅在运行时知道的oracle表中动态获取数据?【英文标题】:Howtofetchdatadynamicallyfromanoracletablewhosestructureisknownonlyatruntimeusingplsqlprocedure?【发布时间】:2013-04-1306:55:08【问题描述】:我被要求创建一个pl/sql... 查看详情

如何使用 JdbcTemplate 在 Spring 中简洁地调用 PL/SQL 过程并返回其输出变量?

】如何使用JdbcTemplate在Spring中简洁地调用PL/SQL过程并返回其输出变量?【英文标题】:HowtosuccinctlycallaPL/SQLprocedureandreturnitsoutputvariablesinSpringwithJdbcTemplate?【发布时间】:2020-02-0415:55:23【问题描述】:这里是Oracle的新手。我的经验... 查看详情

您可以在包内使用已创建的过程和已创建的函数吗?

】您可以在包内使用已创建的过程和已创建的函数吗?【英文标题】:Canyouuseanalreadycreatedprocedureandanalreadycreatedfunctioninsideofapackage?【发布时间】:2019-06-2503:17:14【问题描述】:我是PL/SQL的新手,我正在尝试创建一个包,其中包含... 查看详情

如何在pl sql中的BULK COLLECT中使用WITH子句

】如何在plsql中的BULKCOLLECT中使用WITH子句【英文标题】:HowtouseWITHClauseinBULKCOLLECETinsideplsql【发布时间】:2021-04-2211:15:57【问题描述】:我想知道如何在PL/SQL块内的BULKCOLLECT中使用WITH子句。目前我可以将数据放入如下的集合变量中... 查看详情

如何在 vue 中触发 npm 包内的方法?

】如何在vue中触发npm包内的方法?【英文标题】:Howtotriggeramethodinsidenpmpackageinvue?【发布时间】:2021-04-2106:47:59【问题描述】:我是Vuejs的新手,我正在使用vue-countup-v2npm包我安装它,然后将它导入我的Vue组件中,当我加载页面时... 查看详情

如何使用存储过程创建随机函数? PL/SQL

】如何使用存储过程创建随机函数?PL/SQL【英文标题】:Howtocreaterandomfunctionusingastoredprocedure?PL/SQL【发布时间】:2021-12-3121:43:44【问题描述】:我有一个添加数据的程序add_price(cust_idcustomers.id%type,items_iditems.id%type,pricenumber);我想创... 查看详情

我啥时候应该在 PL/SQL 中使用过程或函数?

】我啥时候应该在PL/SQL中使用过程或函数?【英文标题】:whenshouldIgoforprocedureorfunctioninPL/SQL?我什么时候应该在PL/SQL中使用过程或函数?【发布时间】:2012-03-2403:32:57【问题描述】:我是PL/SQL新手,正在尝试一些练习示例。我对P... 查看详情

如何创建一个 Oracle 全局类型并在 PL/SQL 中使用它?

】如何创建一个Oracle全局类型并在PL/SQL中使用它?【英文标题】:HowtocreateaOracleglobaltypeanduseitinPL/SQL?【发布时间】:2012-10-0810:07:14【问题描述】:在过程或函数中声明的OracleRECORDTYPE是本地的,因此只能在本地使用。如何声明一... 查看详情

如何在函数中使用 Pl/SQL 集合

】如何在函数中使用Pl/SQL集合【英文标题】:HowtousePl/SQLCollectionwithinaFunction【发布时间】:2015-01-2308:50:39【问题描述】:对于作业,建议使用集合。简单地说,我需要将一个字符串分成几个子字符串,将这些字符串的顺序颠倒并... 查看详情

PL/SQL - 如何在 IN 子句中使用数组

】PL/SQL-如何在IN子句中使用数组【英文标题】:PL/SQL-HowtouseanarrayinanINClause【发布时间】:2013-09-2418:26:01【问题描述】:我正在尝试在IN子句中将一组输入值用于我的过程,作为游标where子句的一部分。我知道以前有人问过这个问... 查看详情

如何在pl/sql developer中调用存储过程

】如何在pl/sqldeveloper中调用存储过程【英文标题】:Howtocallastoredprocedureinpl/sqldeveloper【发布时间】:2021-12-1507:36:14【问题描述】:我是新手,有一个简单的问题。我在pl/sqldeveloper中创建了一个类似的过程CREATEORREPLACEPROCEDUREmyproc2AS... 查看详情