Oracle 数据库中的存储过程 (11g)

Stored procedures in Oracle databases (11g)

我为此苦恼了一段时间。

I want to create 3 different stored procedures but i am not very sure about the syntax and how to execute them in Oracle database (version 11g)

我的 table 包含这些列,这是定义:

id NUMBER

amount VARCHAR2(30)

date VARCHAR2(30)

我想创建一个程序,允许我从单个 table 中提取所有行,这就是我所做的:

create or replace PROCEDURE GetAllRows(cursor_ OUT SYS_REFCURSOR) AS
BEGIN
OPEN cursor_ FOR
    SELECT *
      FROM My_Table  
END GetAllRows;   

还好吗?我应该如何执行它?


此外,我想向其中插入一些信息 table,所以我创建了另一个 SP:

CREATE PROCEDURE insert_row(
                    id IN NUMBER,
                    amount IN VARCHAR,
                    date IN VARCHAR

                        )
IS
BEGIN

INSERT INTO My_table(id, amount, id) VALUES (id, amount, date);

END insert_row;

还好吗?我应该如何执行它?

我有点迷失了 Oracle 数据库。

请尝试使用以下代码获取存储过程输出。

variable rc refcursor;
exec GetAllRows( :rc );
print rc;

如果不举个例子就很难谈论'style'或'well written',而且SO的框架只允许'answer'而不是'comment'.因此,我将扩展 'answer' 的含义并向您展示我将如何对其进行编码:

CREATE PROCEDURE insert_row(p_descriptive_id IN NUMBER,
                            p_descriptive_amount IN VARCHAR,
                            p_descriptive_date IN VARCHAR
                            )
IS
BEGIN

   INSERT INTO My_table(descriptive_id, 
                        descriptive_amount, 
                        descriptive_date) 
                 VALUES (p_descriptive_id, 
                         p_descriptive_amount, 
                         p__descriptive_date);

END insert_row;

评论:

  1. 所有字段和列名称均为 'descriptive' - adjective_noun 格式
  2. 所有参数以'p_'开头,以区分投注。参数和列。有些人喜欢一个前缀来指示它是输入还是输出参数 (i_descriptive_input, o_descriptive_output.
  3. 在您的 INSERT 行中,列中的列名称(和值)未排成一行。基本规则,逗号分隔的列表应该在逗号处换行,这样列表就在一列中。更容易阅读和理解其中的内容。特别是在 INSERT 上,当您需要确保 table 列和值匹配时。