我需要帮助在Oracle中创建过程,如SELECT语句:
CREATE TABLE test_schema.test_table
(
test1_col INTEGER,
test2_col VARCHAR2(7)
)
;
INSERT INTO test_schema.test_table VALUES (1,'TEST1');
INSERT INTO test_schema.test_table VALUES (1,'TEST1_1');
INSERT INTO test_schema.test_table VALUES (2,'TEST2');
INSERT INTO test_schema.test_table VALUES (2,'TEST2_2');
INSERT INTO test_schema.test_table VALUES (3,'TEST3');
INSERT INTO test_schema.test_table VALUES (3,'TEST3_3');
CREATE OR REPLACE PROCEDURE test_schema.test_name_procedure
(
var_in_test IN VARCHAR
, var_out_test1 OUT NUMBER
, var_out_test2 OUT VARCHAR
) AS
BEGIN
SELECT
test1_col
test2_col
INTO
var_out_test1
,var_out_test2
FROM test_schema.test_table
WHERE test1_col = var_in_test;
END;
当我执行过程时:
我得到信息:
SQL错误[900] [42000]:ORA-00900:无效的SQL语句
错误:900,位置:0,Sql = EXECUTE test_schema.test_name_procedure(2),OriginalSql = EXECUTE test_schema.test_name_procedure(2),错误消息= ORA-00900:无效SQL语句
ORA-00900:无效的SQL语句
我需要在单独的一栏中列出结果。
当我尝试从开始和结束执行过程时,我得到信息:
BEGIN
test_schema.test_name_procedure(2);
END;
SQL错误[6550] [65000]:ORA-06550:第2行,第14列:
2条答案
按热度按时间zaq34kh61#
忘记“test1_col”第一列后的“,”,请检查此部分
另外你调用的程序不正确,需要添加变量来输出参数:
此请求返回异常TOO_MANY_ROWS,处理该异常
rseugnpd2#
这里有很多问题。让我们从这样的样本数据开始:
您的程序的更正代码可能是:
在WHERE子句中添加ROWNUM = 1,以确保仅检索1行。提供示例数据,如果没有附加条件(添加您自己的条件),它将以错误结束,因为您无法在单个变量中存储多行结果(如果是这种情况,请考虑使用游标)。
接下来,如何调用该过程:
正如你提到的单独的列,也许你需要一个函数而不是一个过程-一个选项可以像这样:
注意:上面的函数返回两列的VarChar 2数据类型……