pl/sql编程中关于同类型的record变量赋值问题

Lurker1900 2009-10-21 10:33:24
同类型的record变量应该可以相互赋值,但是我写的程序报错,大家帮忙看看,谢谢!
declare
type t_emp is record(
v_empno emp.empno%type, --emp表是以scott用户登录时自带的表
v_ename emp.ename%type,
v_job emp.job%type);

type t_emp1 is record(
v_empno emp.empno%type,
v_ename emp.ename%type,
v_job emp.job%type);

v_emp t_emp;
v_emp1 t_emp1;
begin
select empno,ename,job
into v_emp
from emp
where empno = 7566;
v_emp1 := v_emp; --不知道为什么不可以 这里就是第20行
dbms_output.put_line(v_emp1.v_job);
end;


报错信息
ORA-06550: 第 20 行, 第 11 列:
PLS-00382: 表达式类型错误
ORA-06550: 第 20 行, 第 1 列:
PL/SQL: Statement ignored
...全文
262 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wh62592855 2009-10-22
  • 打赏
  • 举报
回复
v_emp1 := v_emp

改成下面这样试试
v_emp1.v_empno:=v_emp.v_empno
v_emp1.v_ename:=v_emp.v_ename
v_emp1.v_job:=v_emp.v_empno
lengyunfei006 2009-10-22
  • 打赏
  • 举报
回复
看了下v_emp1没用上啊,要输出的话,直接以v_emp输出就可以了,为什么要再转到v_emp1 ???
Lurker1900 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kingsunsha 的回复:]


Oracle能对自带的变量类型进行隐式转换,比如integer和varchar2。

[/Quote]

这个能举个例子详细说明下吗?
iqlife 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 kingsunsha 的回复:]
v_emp t_emp;
v_emp1 t_emp1;

v_emp和v_emp1是不同类型的两个变量,虽然两个类型t_emp和t_emp1的定义是相同的。Oracle能对自带的变量类型进行隐式转换,比如integer和varchar2。但对用户自定义的复杂类型,隐式转换是不可能的。

[/Quote]
自定义类型v_emp,无法直接进行赋值
v_emp1 := v_emp;
andyguan01_2 2009-10-22
  • 打赏
  • 举报
回复
t_emp和t_emp1是两个不同的类型,不能直接赋值。将v_emp1也定义为t_emp类型是可以的:

declare
type t_emp is record(
v_empno emp.empno%type, --emp表是以scott用户登录时自带的表
v_ename emp.ename%type,
v_job emp.job%type);

type t_emp1 is record(
v_empno emp.empno%type,
v_ename emp.ename%type,
v_job emp.job%type);

v_emp t_emp;
v_emp1 t_emp;
begin
select empno,ename,job
into v_emp
from emp
where empno = 7566;
v_emp1 := v_emp; --不知道为什么不可以 这里就是第20行
dbms_output.put_line(v_emp1.v_job);
end;
KingSunSha 2009-10-22
  • 打赏
  • 举报
回复
v_emp t_emp;
v_emp1 t_emp1;


v_emp和v_emp1是不同类型的两个变量,虽然两个类型t_emp和t_emp1的定义是相同的。Oracle能对自带的变量类型进行隐式转换,比如integer和varchar2。但对用户自定义的复杂类型,隐式转换是不可能的。
一方晴空 2009-10-21
  • 打赏
  • 举报
回复
declare
type t_emp is record(
v_empno emp.empno%type, --emp表是以scott用户登录时自带的表
v_ename emp.ename%type,
v_job emp.job%type);

type t_emp1 is record(
v_empno emp.empno%type,
v_ename emp.ename%type,
v_job emp.job%type);

v_emp t_emp;
v_emp1 t_emp1;
begin
select empno,ename,job
into v_emp
from emp
where empno = 7566;
v_emp1.v_empno := v_emp.v_empno;
v_emp1.v_ename := v_emp.v_ename;
v_emp1.v_job := v_emp.v_job;
dbms_output.put_line(v_emp1.v_job);
end;

17,377

社区成员

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

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