请各位帮忙看下下面这个存储过程有什么语法错误啊,执行的时候提示我说缺少select关键字
create or replace procedure pro_yg_ztts2(columnname varchar2,
colsnames varchar2,
zttsidds varchar2,
tablenames varchar2,
tablename varchar2,
exams varchar2,
idx varchar2,
condition varchar2) is
VarSQLStr varchar2(2000);
begin
if condition is null then
VarSQLStr := 'insert into yg_ztts(' || columnname ||
',ztid,sourtab,yg_ztts_exam)' || '(select' || colsnames || ',' ||
zttsidds || ',' || tablename || ',' || exams || 'from' ||
tablenames || 'where id=' || idx||')';
else
VarSQLStr := 'insert into yg_ztts(' || columnname ||
',ztid,sourtab,yg_ztts_exam)' || '(select' || colsnames || ',' ||
zttsidds || ',' || tablename || ',' || exams || 'from' ||
tablenames || 'where id=' || idx||'and'||condition||')';
end if;
Execute Immediate VarSQLStr;
end;
create or replace procedure pro_yg_ztts2(columnname varchar2,
colsnames varchar2,
zttsidds varchar2,
tablenames varchar2,
tablename varchar2,
exams varchar2,
idx varchar2,
condition varchar2) is
VarSQLStr varchar2(2000);
begin
if condition is null then
VarSQLStr := 'insert into yg_ztts(' || columnname ||
',ztid,sourtab,yg_ztts_exam)' || '(select' || colsnames || ',' ||
zttsidds || ',' || tablename || ',' || exams || 'from' ||
tablenames || 'where id=' || idx||')';
else
VarSQLStr := 'insert into yg_ztts(' || columnname ||
',ztid,sourtab,yg_ztts_exam)' || '(select' || colsnames || ',' ||
zttsidds || ',' || tablename || ',' || exams || 'from' ||
tablenames || 'where id=' || idx||'and'||condition||')';
end if;
Execute Immediate VarSQLStr;
end;
解决方案 »
- tnsnames这个配置文件是放在服务器端还是客户端啊
- 用Oracle SQL Developer 将MS SQL Server 数据库迁移到 Oracle 11g,“定位源插件”检测失败。
- oracle插入excel文件用什么类型?sql语句怎么写?
- 求一SQL 分组语句!
- 想写个ORACLE在WIN2000下的批处理,用于自动启动数据库.
- 在plsql developer中执行脚本半天没反应的问题
- 添加字段和约束,进退两难
- 用ORACLE可以开发小型数据库吗?
- oracle里字段为布尔类型怎么办呢?
- 在p4机器上安装oracle817成功后出错提示
- cmd中sys密码问题
- oracle 系统表 主键的问题
',ztid,sourtab,yg_ztts_exam)'
为什么用' ¦ ¦
明显不对么
',ztid,sourtab,yg_ztts_exam)' 后面
为什么用' ¦ ¦
明显不对么
应该不是这个问题啊,我现在把后面的select语句的括号去掉又提示我说缺少values关键字。
各位等着急用帮帮忙吧/
另外除了这个以外都要看看哪块少空格
建议连完后用dbms_output.put_line
打出来看看写的sql对不对
select 字段1,字段2
from 表名
--Execute Immediate VarSQLStr;
dbms_output.put_line(VarSQLStr);2. 执行存储过程
3. 在output中检查输出的语句有没有问题
4. 可以拷贝出来单独执行看看结果如何
(
ROW1
,ROW2
,ROW3
...
,ROWN
)
SELECT
ROW1
,ROW2
,ROW3
...
,ROWN
FROM TABLE_NAME2
WHERE .....SELECT 语句不要加().
改成如下看看:
CREATE OR REPLACE PROCEDURE PRO_YG_ZTTS2(COLUMNNAME VARCHAR2,
COLSNAMES VARCHAR2,
ZTTSIDDS VARCHAR2,
TABLENAMES VARCHAR2,
TABLENAME VARCHAR2,
EXAMS VARCHAR2,
IDX VARCHAR2,
CONDITION VARCHAR2) IS
VARSQLSTR VARCHAR2(2000);
BEGIN
IF CONDITION IS NULL THEN
VARSQLSTR := 'insert into yg_ztts(' || COLUMNNAME ||
',ztid,sourtab,yg_ztts_exam)' || '(select ' || COLSNAMES || ',' ||
ZTTSIDDS || ',' || TABLENAME || ',' || EXAMS || ' from ' ||
TABLENAMES || ' where id=''' || IDX || ''')';
ELSE
VARSQLSTR := 'insert into yg_ztts(' || COLUMNNAME ||
',ztid,sourtab,yg_ztts_exam)' || '(select ' || COLSNAMES || ',' ||
ZTTSIDDS || ',' || TABLENAME || ',' || EXAMS || ' from ' ||
TABLENAMES || ' where id=''' || IDX || ''' and ' ||
CONDITION || ')';
END IF;
EXECUTE IMMEDIATE VARSQLSTR;
END;