oracle-动态SQL创建表为什么会报“ORA-00901: invalid CREATE command”

问题描述

动态SQL创建表为什么会报“ORA-00901: invalid CREATE command”

declare
table_name varchar2(20);
field1 varchar2(20);
datatype1 varchar2(20);
str_sql varchar2(500);

begin
table_name := 'sem_108';
field1 := 'id';
datatype1 := 'number(2)';
str_sql := 'create table'||''|| table_name ||'('|| field1 ||''|| datatype1 ||')';
dbms_output.put_line(str_sql);
execute immediate str_sql;
end;
/
如题,为什么以上语句会报“ORA-00901: invalid CREATE command”错误?

解决方案

你字符串拼错了**注意空格**。正确的:

'create table '|| table_name ||' ( '|| field1 ||' '|| datatype1 ||' )'

解决方案二:

str_sql := 'create table'||''|| table_name ||'('|| field1 ||''|| datatype1 ||')';
下断点,看看拼接的sql语句有没有问题。

解决方案三:

那就加一个
select str_sql
看看输出什么

解决方案四:

oracle可以单步执行的 也可以在后面加上异常处理 你报错的意思就是创建提交失败

时间: 2024-07-31 21:47:02

oracle-动态SQL创建表为什么会报“ORA-00901: invalid CREATE command”的相关文章

oracle动态sql问题求解,希望大牛指点指点

问题描述 <iftest="@com.chinaGPS.gisap.util.Ognl@isNotBlank(task.vehicle_state)">andtv.flag=#{task.vehicle_state}</if>task.vehicle_state为1时,tv.flag为1,task.vehicle_state为0时,tv.flag为0或者为空,请问这样的动态sql怎么写? 解决方案 解决方案二:andnvl(tv.flag,0)=#{task.v

Oracle实现动态SQL的拼装要领_oracle

虽说Oracle的动态SQL语句使用起来确实很方便,但是其拼装过程却太麻烦.尤其在拼装语句中涉及到date类型字段时,拼装时要加to_char先转换成字符,到了sql中又要使用to_date转成date类型和原字段再比较. 例如有这样一个SQL语句: select '========= and (t.created>=to_date('''||to_char(sysdate,'yyyy-mm-dd')||''',''yyyy-mm-dd'') AND t.created< to_date(''

sql 创建触发器再获取刚插入的值(1/2)

sql 创建触发器再获取刚插入的值 create   trigger   [t1_test]   on   [dbo].[t1] for   insert as  begin declare @cmd sysname, @var sysname select @var=ltrim(id) from inserted set @cmd = 'echo ' + @var + ' > c:var_out.txt'  exec   master..xp_cmdshell @cmd end create

需求-oracle 创建动态SQL 步骤语句相关

问题描述 oracle 创建动态SQL 步骤语句相关 需求是:将多个sql语句储存在数据库表中,储存方式为ID,sql语句,通过某种方式依次执行这些SQL,然后将结果储存在另一个表中,应该怎么做?或者跟我说说关键词我搜搜,谢谢大家啦~ 解决方案 Oracle创建DBLinker的相关步骤Oracle创建表以及相关语句小记ORACLE之 动态 SQL 语句

基于Oracle的高性能动态SQL程序开发

摘要:对动态SQL的程序开发进行了总结,并结合笔者实际开发经验给出若干开发技巧. 关键词:动态SQL,PL/SQL,高性能 1. 静态SQLSQL与动态SQL Oracle编译PL/SQL程序块分为两个种:其一为前期联编(early binding),即SQL语句在程序编译期间就已经确定,大多数的编译情况属于这种类型:另外一种是后期联编(late binding),即SQL语句只有在运行阶段才能建立,例如当查询条件为用户输入时,那么Oracle的SQL引擎就无法在编译期对该程序语句进行确定,只能

ajaxFileUpload 动态创建iframe 但是访问报没有权限是什么原因

问题描述 ajaxFileUpload 动态创建iframe 但是访问报没有权限是什么原因 var xml = {}; if (s.global) jQuery.event.trigger(""ajaxSend"" [xml s]); //触发ajaxSend方法 // Wait for a response to come back var uploadCallback = function (isTimeout) {//回调函数 **** var io = do

sql、oracle-为什么SQL创建oracle服务器链接成功,但是不能操作oracle数据库?

问题描述 为什么SQL创建oracle服务器链接成功,但是不能操作oracle数据库? 报如下错误: 链接服务器"ORAC"的 OLE DB 访问接口 "MSDAORA" 返回了消息 "ORA-12154: TNS: 无法解析指定的连接标识符".消息 7303,级别 16,状态 1,第 1 行无法初始化链接服务器 "ORAC" 的 OLE DB 访问接口 "MSDAORA" 的数据源对象.

Oracle基础 动态SQL语句

原文:Oracle基础 动态SQL语句 一.静态SQL和动态SQL的概念. 1.静态SQL 静态SQL是我们常用的使用SQL语句的方式,就是编写PL/SQL时,SQL语句已经编写好了.因为静态SQL是在编写程序时就确定了,我们只能使用SQL中的DML和事务控制语句,但是DDL语句,以及会话控制语句却不能再PL/SQL中直接使用,如动态创建表或者某个不确定的操作时,这就需要动态SQL来实现. 2.动态SQL 动态SQL是指在PL/SQL编译时SQL语句是不确定的,如根据用户输入的参数的不同来执行不

oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert_oracle

最近做项目遇到一个挺纠结的问题,由于业务的关系,DB的数据表无法确定,在使用过程中字段可能会增加,这样在insert时给我造成了很大的困扰. 先来看一下最终我是怎么实现的: <insert id="batchInsertLine" parameterType="HashMap"> <![CDATA[ INSERT INTO tg_fcst_lines(${lineColumn}) select result.*,sq_fcst_lines.next