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