【问题标题】:What is the difference between Procedures and Functions in PLSQL?PLSQL 中的过程和函数有什么区别?
【发布时间】:2018-11-01 17:59:55
【问题描述】:

我正在尝试使用 PLSQL 在表中插入一行。表名是 DOCUMENT_ISSUE_HISTORY。我正在使用 API 过程名称 PROCEDURE

Insert_New_Line_ (
   doc_class_ IN VARCHAR2,
   doc_no_ IN VARCHAR2,
   doc_sheet_ IN VARCHAR2,
   doc_rev_ IN VARCHAR2,
   info_category_db_ IN VARCHAR2,
   note_ IN VARCHAR2 );

如果 PRECEDURE 可以像函数一样返回值,我会感到困惑。 我正在这样做:

DECLARE
    doc_class_ varchar2(4000) := 'CVS FILE';
    doc_no_ varchar2(4000) := '01004901.DWG-DWF';
    doc_sheet_ varchar2(20) := 1;
    doc_rev_ varchar2(20) := -1;
    info_category_db_  VARCHAR2(20) :=  NULL;
    note_ VARCHAR2(4000) := 'TEXTING TO UPDATE or FIeld to update';

BEGIN

Document_Issue_History_API.Insert_New_Line__ (doc_class_ ,doc_no_,doc_sheet_,doc_rev_ ,info_category_db_,note_);

end;

如何在表格中插入行?

【问题讨论】:

标签: plsql plsqldeveloper


【解决方案1】:

函数有返回值,因此可能出现在任何可以使用表达式的地方(例如赋值运算符的右侧,或作为 SQL 语句中的列表达式),而过程没有返回值,可能无法使用作为表达式。

这并不是说程序不能返回值,因为只要是 OUT 或 IN/OUT 参数,它们就可以。您不能直接在表达式中使用该过程。

同样,由于函数确实有返回值(除了那些指定为 OUT 或 IN/OUT 参数的参数),因此它们必须在表达式中使用并且不能直接调用。

【讨论】:

  • 如何在不使用 INSERT 的情况下使用 PLSQL 添加记录行?
  • 那么,我怎样才能在 PACKAGE 中创建一个函数,以便能够在表中插入一行?有可能吗?
  • 关于您的第一条评论,最终您无法插入表格,而最终在某处没有 INSERT 语句。 Re Comment 2) 在包中创建函数只需声明它function <YourFunctionName>(input data_type, ...) returns SomeDataType as [local declarations] BEGIN <insert your code here> END [YourFunctionName];
猜你喜欢
  • 2020-12-24
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
相关资源
最近更新 更多