Oracle 带有select into参数的存储过程

Oracle 带有select into参数的存储过程,oracle,stored-procedures,parameters,Oracle,Stored Procedures,Parameters,我找了很多,但找不到答案,所以问了这个问题 目前我有一张桌子 create table SAM_TEMP ( col1 number null, col2 varchar(100) null ) 当我使用如下所示的列类型创建参数时,我正在尝试创建一个存储过程 CREATE OR REPLACE PROCEDURE SP_IN_PARAM( INPARAM1 IN SAM_TEMP.COL2%TYPE, OUTPARAM2 OUT sam_temp.col1%type ) AS

我找了很多,但找不到答案,所以问了这个问题

目前我有一张桌子

create table SAM_TEMP
(
col1 number null,
col2 varchar(100) null
)
当我使用如下所示的列类型创建参数时,我正在尝试创建一个存储过程

CREATE OR REPLACE
PROCEDURE SP_IN_PARAM(
    INPARAM1 IN SAM_TEMP.COL2%TYPE,
    OUTPARAM2 OUT sam_temp.col1%type )
AS
BEGIN
  SELECT col1 INTO OUTPARAM2 FROM SAM_TEMP WHERE COL2=INPARAM1;
END SP_IN_PARAM;
但当我直接用数据类型创建参数时,如下图所示,它不起作用。有人能帮我理解吗

CREATE OR REPLACE
PROCEDURE SP_IN_PARAM(
    INPARAM1 IN number,
    OUTPARAM2 OUT varchar(100) )
AS
BEGIN
  SELECT col1 INTO OUTPARAM2 FROM SAM_TEMP WHERE COL2=INPARAM1;
END SP_IN_PARAM;

提前感谢您的帮助

您在数据类型上不提供维度,只提供类型名称本身。因此,这应该是可行的:

CREATE OR REPLACE
PROCEDURE SP_IN_PARAM(
    INPARAM1 IN number,
    OUTPARAM2 OUT varchar )
AS
BEGIN
  SELECT col1 INTO OUTPARAM2 FROM SAM_TEMP WHERE COL2=INPARAM1;
END SP_IN_PARAM;

另外,通常不应使用VARCHAR,而应使用VARCHAR2。

您不提供数据类型的维度,只提供类型名称本身。因此,这应该是可行的:

CREATE OR REPLACE
PROCEDURE SP_IN_PARAM(
    INPARAM1 IN number,
    OUTPARAM2 OUT varchar )
AS
BEGIN
  SELECT col1 INTO OUTPARAM2 FROM SAM_TEMP WHERE COL2=INPARAM1;
END SP_IN_PARAM;

另外,您通常不应该使用VARCHAR,而应该使用VARCHAR2。

请注意,发布错误而不是说某个东西“不工作”总是有帮助的。这是我的第一个问题:),谢谢您下次记住。请注意,发布错误而不是说某个东西“不工作”总是有帮助的。这是我的第一个问题:),谢谢你下次会记住的谢谢你工作:),我的数据中有空格,不应将其视为null,因此使用varchar而不是varchar2@sam-目前,
varchar
varchar2
之间没有功能差异。理论上,Oracle保留将来更改
varchar
功能以匹配SQL规范并允许非空字符串的权利。但这不是今天的行为。谢谢,有趣的是,我现在回去修改该列,尽管我创建了一个varchar列,它会自动转换为varchar2,可能是我们的dba的一些设置不确定啊,感谢对varchar和varchar2差异的教育,Justin。谢谢你的帮助:),我的数据中有空格,不应将其视为null,因此使用varchar而不是varchar2@sam-目前,
varchar
varchar2
之间没有功能差异。理论上,Oracle保留将来更改
varchar
功能以匹配SQL规范并允许非空字符串的权利。但这不是今天的行为。谢谢,有趣的是,我现在回去修改这个列,尽管我创建了一个varchar列,它会自动转换为varchar2,可能是我们的dba的一些设置不确定啊,感谢对varchar和varchar2差异的教育,Justin。