oracle 的存储过程中 动态的创建一张表 然后插入一个变量到这个表中,表能动态的创建但是变量不能插入进去

我的代码如下createorreplaceprocedureP_judgeexist(v_namechar,v_birthdatestaff.stbirthdate%ty... 我的代码如下
create or replace procedure P_judgeexist
(
v_name char ,
v_birthdate staff.stbirthdate%type,
v_phone staff.stphone%type,
v_depid staff.depid%type,
v_gender staff.stgender%type,
v_money staff.money%type
)
is
a int;
v_sql char(50);
begin
SELECT COUNT(*) into a
FROM all_tables
WHERE table_name= 'ADDTOPINFO';

P_addstaffnum(v_name,v_birthdate,v_phone,v_depid,v_gender,v_money);
if a=0
then
execute immediate 'create table addtopinfo(addtime date,staffname char(15))';
execute immediate ' insert into addtopinfo values('||sysdate||','||v_name||')';

else

execute immediate ' insert into addtopinfo values('||sysdate||','||v_name||')';

end if;
end;

--调用过程
begin
P_judgeexist('王老吉',to_date('1999-11-12','yyyy-mm-dd'),'13880',7,'男',3200);
end;
这句话出错了, execute immediate ' insert into addtopinfo values('||sysdate||','||v_name||')'; 不知道怎么搞的,求教各位
我用 v_sql:= 'insert into addtopinfo values('''||sysdate||''','''||v_name||''')';

成功运行 感谢
帮组解答的童鞋
create 表之后仍然需要commit.....
展开
 我来答
Math_Ly
推荐于2018-04-13 · TA获得超过116个赞
知道小有建树答主
回答量:197
采纳率:0%
帮助的人:89.1万
展开全部
1、execute immediate ' insert into addtopinfo values('||sysdate||','||v_name||')'; v_name 既然是变量 怎么可能会用' '括号起来;
就算是 直接执行 的话 也是 execute immediate ' insert into addtopinfo values(sysdate,v_name);
2、如果有v_name的话 ,我建议你一般用拼sql的方式来执行
例如 如下格式(这个是我自己的procedure截取的,可以参考下)
v_CreateSql := ' create table ' ||vv_owner||'.'|| vv_name_temp ||
' as select * from ' || iv_name || ' where 1=0';

execute immediate v_CreateSql;

3、下次报错,请把你的出错情况提出来。我们怎么知道什么错呢?
更多追问追答
追问

我把语句改成

v_sql:= 'insert into addtopinfo values('||sysdate||','||v_name||')';


然后在创建表之后添加了一个

commit


但是提示

追答
你把你整个sql发出来。。。。肯定其它部分出错了。
百度网友eafe715dc
2012-10-13 · TA获得超过1490个赞
知道小有建树答主
回答量:763
采纳率:50%
帮助的人:643万
展开全部
估计是缺少引号的缘故。v_name是varchar2的吧。
改成 execute immediate ' insert into addtopinfo values('||sysdate||',‘‘'||v_name||'’’)'; 试试,就是v_name变量在语句里要有引号 。拼接字符串时每两个“'” 会被解析成为一个“'”
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
azzo_c
2012-10-15 · TA获得超过142个赞
知道答主
回答量:122
采纳率:0%
帮助的人:53.4万
展开全部
即使不加引号也可以插入的 最多oracle会做个隐式转换,这不会有问题 而且v_name本身就是char类型,根本不能存在转换问题

我有个疑问P_addstaffnum 这个是楼主干什么用的?

至于报错的问题楼主少了分号和commit才是关键!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
学习先知道
2012-10-19 · TA获得超过400个赞
知道小有建树答主
回答量:341
采纳率:0%
帮助的人:395万
展开全部
create table 表名 as select * from 表
在存储过程里面加 execute immediate
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我又强力了
2012-10-13 · TA获得超过802个赞
知道小有建树答主
回答量:1058
采纳率:0%
帮助的人:718万
展开全部
过程里面建表 需要commit后才能插入吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式