请问关于函数的问题

woshini1982 2010-12-13 02:06:48
1建立表 use
id name
1 wo
2 you

2创建函数
create function eet
(na in use.id%type)
return use.name%type
as
outpwd use.name%type;

begin
select name into outpwd from use where id=na;
return outpwd;
end;

3调用
set serveroutput on
declare
var use.name%type;
begin
var:=eet(1);
dbms_output.put_line(var);
end;

运行后出现错误如下:
declare
*
第一行错误:
ora-01722:无效数字
ora-06512:在"eet",line 7
ora-06512:在line 4

请问应该如何修改呢?谢谢
...全文
64 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
woshini1982 2010-12-20
  • 打赏
  • 举报
回复
谢谢各位的帮忙 受益匪浅
woshini1982 2010-12-13
  • 打赏
  • 举报
回复
谢谢以上各位朋友的回答
心中的彩虹 2010-12-13
  • 打赏
  • 举报
回复
函数没错 关键看你 的建表语句 以及调用传参的时候值是否对表类型一样


scott@ORCL> ed
已写入 file afiedt.buf

1 CREATE TABLE USE
2 (ID NUMBER,
3 NAME VARCHAR2(10)
4* )
5 /

表已创建。

scott@ORCL> insert into use
2 select 1,'wo' from dual union all
3 select 2,'you' from dual
4 /

已创建2行。

scott@ORCL> commit
2 /

提交完成。

scott@ORCL> ed
已写入 file afiedt.buf

1 create function eet(na in use.id%type) return use.name%type
2 as
3 outpwd use.name%type;
4 begin
5 select name into outpwd from use where id=na;
6 return outpwd;
7* end;
scott@ORCL> /

函数已创建。

scott@ORCL> set serveroutput on
scott@ORCL> ed
已写入 file afiedt.buf

1 declare
2 var use.name%type;
3 begin
4 var:=eet(1);
5 dbms_output.put_line(var);
6* end;
scott@ORCL> /
wo

PL/SQL 过程已成功完成。

lxyzxq2008 2010-12-13
  • 打赏
  • 举报
回复

--这是我的整个过程,楼主看下
1.建表
CREATE TABLE TEST.USE
(
ID NUMBER(2,0),
NAME VARCHAR2(10)
)
PCTFREE 10
MAXTRANS 255
TABLESPACE KANRI
STORAGE(INITIAL 1M NEXT 1M MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 BUFFER_POOL DEFAULT)
NOCACHE
LOGGING
/

2.表中插入数据
ID NAME
1 LOUZHU

3.创建函数
create function eet2
(na in use.id%type)
return use.name%type
as
outpwd use.name%type;

begin
select name into outpwd from use where id=na;
return outpwd;
end;

4.执行函数
SQL> set serveroutput on
SQL> declare
2 var use.name%type;
3 begin
4 var:=eet2(1);
5 dbms_output.put_line(var);
6 end;
7 /
LOUZHU

PL/SQLプロシージャが正常に完了しました。

SQL>

--上述执行成功,和var关键字木有一毛钱的关系,
--应该是楼主参数的类型不太对应
lxyzxq2008 2010-12-13
  • 打赏
  • 举报
回复

--靠!颜色有问题啊
CREATE TABLE CASKOKYOTEST.USE
(
ID NUMBER(2,0),
NAME VARCHAR2(10)
)
PCTFREE 10
MAXTRANS 255
TABLESPACE KANRI
STORAGE(INITIAL 1M NEXT 1M MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 BUFFER_POOL DEFAULT)
NOCACHE
LOGGING
/

lxyzxq2008 2010-12-13
  • 打赏
  • 举报
回复

楼主的表结构,如果是这个样子,就应该没有问题
CREATE TABLE CASKOKYOTEST.USE
(
ID NUMBER(2,0),
NAME VARCHAR2(10)
)
PCTFREE 10
MAXTRANS 255
TABLESPACE KANRI
STORAGE(INITIAL 1M NEXT 1M MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 BUFFER_POOL DEFAULT)
NOCACHE
LOGGING
/

Oraclefans_ 2010-12-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 woshini1982 的回复:]
1建立表 use
id name
1 wo
2 you

2创建函数
create function eet
(na in use.id%type)
return use.name%type
as
outpwd use.name%type;

begin
select name into outpwd from use where id=na;
return out……
[/Quote]
var是oracle 关键字,换个名字试下。。
  • 打赏
  • 举报
回复
[Quote=引用楼主 woshini1982 的回复:]
1建立表 use
id name
1 wo
2 you

2创建函数
create function eet
(na in use.id%type)
return use.name%type
as
outpwd use.name%type;

begin
select name into outpwd from use where id=na;
return outpw……
[/Quote]你的id是什么类型啊?varchar2?
var:=eet('1');

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧