求高人帮忙,我自己写的一个过程,它总是提示编译错误

gaoyan0806 2005-08-10 04:12:57
在oracle9i 的sql plus中编译的,是一个向数据库中重复插入图片的procedure,但是总提示编译错误,哪位帮帮忙啊,先谢谢了代码如下:
create table image_lob(T_ID VARCHAR2 (5) NOT NULL,T_IMAGE BLOB NOT NULL);
CREATE OR REPLACE DIRECTORY IMAGES AS 'C:\Oracle';
Create or replace procedure img_insert(T_amount1 number ,T_amount2 number) as
F_lob bfile;
B_lob blob;
Temp varchar2;
Temp2 varchar2;
Begin
Temp:=”user”;
Temp2:=”.jpg”;
Loop
If n_amount1>n_amount2 then
Exit;
End if;
INSERT INTO IMAGE_LOB (T_ID, T_IMAGE)
Values(T_amount1,empty_blob()) return T_IMAGE into B_lob;
F_LOB:= BFILENAME ('IMAGES', temp.concat(n_amount1,temp2));
DBMS_LOB.FILEOPEN (F_LOB, DBMS_LOB.FILE_READONLY);
DBMS_LOB.LOADFROMFILE (B_LOB, F_LOB,
DBMS_LOB.GETLENGTH (F_LOB));
DBMS_LOB.FILECLOSE (F_LOB);
Commit;
N_amount1:=n_amount1+1;
End loop;
End;
程序所用到的图片是以user1,user2,....命名的,
...全文
110 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
precipitant 2005-08-11
  • 打赏
  • 举报
回复
语法上的小毛病。楼主细心不够。
njhart2003 2005-08-10
  • 打赏
  • 举报
回复
n_amount1:=n_amount1+1; -- 此处不能修改传入的变量

我修改了一下:

SQL> create table image_lob(T_ID VARCHAR2 (5) NOT NULL,T_IMAGE BLOB NOT NULL);

表已创建。

SQL> desc image_lob
名称 空? 类型
----------------------------------------------------- -------- ------------------
T_ID NOT NULL VARCHAR2(5)
T_IMAGE NOT NULL BLOB

SQL> CREATE OR REPLACE DIRECTORY IMAGES AS 'C:\Oracle';

目录已创建。

SQL> create or replace procedure img_insert(
2 n_amount1 in number,
3 n_amount2 in number
4 )
5 as
6 F_lob bfile;
7 B_lob blob;
8 Temp varchar2(20);
9 Temp2 varchar2(20);
10 n number default n_amount1; -- 加一个变量
11 errstr varchar2(1000); -- 出差信息提示
12 Begin
13 Temp:='user';
14 Temp2:='.jpg';
15 Loop
16 If n>n_amount2 then -- 此处用n代替n_amount1
17 Exit;
18 End if;
19 INSERT INTO IMAGE_LOB (T_ID, T_IMAGE)
20 Values(n,empty_blob()) return T_IMAGE into B_lob;
21 F_LOB:= BFILENAME ('IMAGES', Temp||n||temp2); -- 此处修改了
22 DBMS_LOB.FILEOPEN (F_LOB, DBMS_LOB.FILE_READONLY);
23 DBMS_LOB.LOADFROMFILE(B_LOB, F_LOB,DBMS_LOB.GETLENGTH(F_LOB));
24 DBMS_LOB.FILECLOSE (F_LOB);
25 Commit;
26 n:=n+1; -- 此处修改了
27 End loop;
28 exception when others then
29 errstr:=sqlerrm(sqlcode);
30 dbms_output.put_line(errstr);
31 End;
32 /

过程已创建。

SQL> execute img_insert(1,2);

PL/SQL 过程已成功完成。

SQL> select t_id,dbms_lob.getlength(t_image) from image_lob order by t_id;

T_ID DBMS_LOB.GETLENGTH(T_IMAGE)
----- ---------------------------
1 423539
2 423539

已选择2行。

gaoyan0806 2005-08-10
  • 打赏
  • 举报
回复
Create or replace procedure img_insert(n_amount1 number ,n_amount2 number) as
F_lob bfile;
B_lob blob;
temp varchar2(20);
temp2 varchar2(20);
Begin
temp:='user';
temp2:='.jpg';
Loop
If n_amount1>n_amount2 then
Exit;
End if;
INSERT INTO IMAGE_LOB (T_ID, T_IMAGE)
Values(n_amount1,empty_blob()) return T_IMAGE into B_lob;
F_LOB:= BFILENAME ('IMAGES', temp.concat(n_amount1,temp2));
DBMS_LOB.FILEOPEN (F_LOB, DBMS_LOB.FILE_READONLY);
DBMS_LOB.LOADFROMFILE (B_LOB, F_LOB,
DBMS_LOB.GETLENGTH (F_LOB));
DBMS_LOB.FILECLOSE (F_LOB);
Commit;
n_amount1:=n_amount1+1;
End loop;
End;
/

提示如下:
PL/SQL: Statement ignored
PLS-00487: 对变量 'TEMP' 的引用无效
PLS-00363: 表达式 'N_AMOUNT1' 不能用作赋值目标
PL/SQL: Statement ignored

哪位大哥帮忙调试一下啊,
bzszp 2005-08-10
  • 打赏
  • 举报
回复
Temp varchar2(20);
Temp2 varchar2(30);--定义必须有长度

用show error命令看错误信息。
gaoyan0806 2005-08-10
  • 打赏
  • 举报
回复
具体的错误提示是:创建的过程带有编译错误

Create or replace procedure img_insert(T_amount1 number ,T_amount2 number) as
这句话里的两个参数应该是n_amount1,和n_amount2
Values(T_amount1,empty_blob()) return T_IMAGE into B_lob;
这句话里的T_amount1应换为n_amount1,我马虎了

可是还是不行啊

precipitant 2005-08-10
  • 打赏
  • 举报
回复
具体的错误提示是啥?

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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