标签: ora-00911

为什么使用EXECUTE IMMEDIATE运行此查询会导致它失败?

我正在编写一个需要动态生成一些查询的PL/SQL过程,其中一个过程涉及使用作为参数的查询结果创建临时表.

CREATE OR REPLACE PROCEDURE sqlout(query IN VARCHAR2)
IS
BEGIN
EXECUTE IMMEDIATE  'CREATE GLOBAL TEMPORARY TABLE tmp_tab AS (' || query || ');';
END;
Run Code Online (Sandbox Code Playgroud)

它编译正确,但即使使用非常简单的查询,例如:

BEGIN
    sqlout('SELECT * FROM DUAL');
END;
Run Code Online (Sandbox Code Playgroud)

IT抛出ORA-00911: invalid character.如果我手动运行创建的查询,它会正确运行.在这一点上,我能够确定导致问题的原因.

sql oracle plsql dynamic-sql ora-00911

9
推荐指数
1
解决办法
2万
查看次数

ORA-00911:C#中的字符无效,但不是Oracle SQL Developer

我有一个抛出的代码行

Oracle异常 - ORA-00911:无效字符

在尝试以下C#代码时:

double tempDateTimeObj = Convert.ToDouble(someClass.GetTime(tempObjID, objStartTime, todayTime).Rows[0][0]);
Run Code Online (Sandbox Code Playgroud)

GetTime是一个函数,它进行SQL调用,接受上面看到的变量,SQL调用OUTs为Oracle数字类型,然后GetTime C#函数DataTableCollection Tables每次返回一行对象.

public static DataTable GetTime(string tempObjID, DateTime objStartTime, DateTime todayTime)
{

    string sql = "select some_pkg.get_time('" + tempObjID + "', to_date('" + objStartTime + "', 'mm/dd/yyyy hh:mi:ss am'), to_date('" + todayTime + "', 'mm/dd/yyyy hh:mi:ss am')) from dual;";

    return <connection object>.getDS(sql).Tables[0];
}
Run Code Online (Sandbox Code Playgroud)

如果我调试,抓取具有变量值的sql字符串,并将其抛入Oracle SQL Developer,它可以正常工作并在SQL Dev控制台中返回一个数字.但是,当我调试并遇到该行时,C#代码会抛出00911异常.由于字符串sql已在Oracle SQL Dev中测试过,因此语法应该有效.鉴于有效的语法,为什么VS2010会抛出此错误/异常?

编辑: 这是一个用C#构建并发送到数据库的示例字符串:

select some_pkg.get_time('23569245', to_date('11/8/2012 1:21:06 PM', 'mm/dd/yyyy hh:mi:ss am'), to_date('12/31/2012 12:52:18 AM', 'mm/dd/yyyy hh:mi:ss am')) from …
Run Code Online (Sandbox Code Playgroud)

c# sql ora-00911 oracle-sqldeveloper

7
推荐指数
1
解决办法
1万
查看次数

在Oracle中的一个ExecuteScalar中运行多个命令

我有一批sql语句,如...

插入.... ; 插入.... ; 删除.........;

等等

当我尝试对oracle执行它们时它给了我这个错误(ORA-00911无效字符)

现在我可以理解这是因为语句之间的分号,我在SQL Server上尝试了这个并且它起作用但是在Oracle中没有运气到目前为止.

有没有办法使用ExecuteScalar或其他一些函数对oracle运行多个语句?


DUPLICATE:如何使用.NET执行多个Oracle SQL语句

sql oracle executescalar ora-00911

6
推荐指数
1
解决办法
7700
查看次数

ORACLE在Execute Immediate中批处理DDL语句

我正在尝试在一个Execute Immediate语句中运行多个ddl语句.我认为这将是非常直接的,但似乎我错了.

这个想法是这样的:

declare v_cnt number; 

begin 

select count(*) into v_cnt from all_tables where table_name='TABLE1' and owner = 'AMS'; 

if v_cnt = 0 then 

execute immediate 'CREATE TABLE TABLE1(VALUE VARCHAR2(50) NOT NULL)  ALTER TABLE TABLE1 ADD (MYVAL2 NVARCHAR2(10))'; 

end if; 

end;
Run Code Online (Sandbox Code Playgroud)

但是这会导致错误

ORA-00911:无效字符ORA-06512:第10行

如果我自己执行它们,批处理中的每个语句都可以正常运行.如果我接受这个语句并执行它,它将运行良好(使用;在两个语句之间).如果我删除; 在语句之间我得到关于无效选项的不同错误

计划是我将能够构建一个表,导出该表的表模式,包括它的所有alter语句,然后作为安装/更新过程的一部分对另一个系统运行批处理.

那么,我如何在单个执行立即批处理这些DDL语句?或者有更好的方法来做我需要的东西吗?

我必须承认,我有点像甲骨文新手.谢谢大家的耐心等待.

sql oracle oracle10g ora-00911

5
推荐指数
1
解决办法
6288
查看次数

oracle php ORA-00911 UPDATE上的无效字符

我正在运行一个PHP脚本,用于从Oracle DB更新表.首先,我收到一个带有JSON的对象:

[{"lot":"KLMHA17N9N00","requestor":"B10078","id":"FRESHLOT","username":"B26696","password":"B26696"},{"lot":"KLMHA17R1800","requestor":"B10078","id":"FRESHLOT"}]
Run Code Online (Sandbox Code Playgroud)

自从我在其他项目中使用JSON以来没有任何问题.

然后我在将结果解析为$ rmrid对象后创建查询:

$db_query = "update ao_lots 
                 set RMRID='".$rmrid->requestor."-".$rmrid->id."' 
               where ALOT_NUMBER='".$rmrid->lot."';";
Run Code Online (Sandbox Code Playgroud)

如果我回应查询,我得到这个:

update ao_lots 
   set RMRID='B10078-FRESHLOT' 
 where ALOT_NUMBER='KLMHA17N9N00';
Run Code Online (Sandbox Code Playgroud)

我没有看到任何问题,但是当我执行查询时,我收到此警告并且没有更新任何内容:

警告:oci_execute()[function.oci-execute]:ORA-00911:无效字符

我对该错误代码进行了一些搜索,但我找不到我发现的信息

任何建议将不胜感激

php oracle json ora-00911

4
推荐指数
1
解决办法
6445
查看次数

JDBC对存储过程的调用返回null

我在Oracle数据库上存储过程时遇到了一些问题.

我只想调用一个过程(它有50个IN参数和2个IN OUT参数)并获得这2个OUT参数.

我正在尝试执行()相关的CallableStatement,但它返回一个NullPointerException

java.lang.NullPointerException
at oracle.jdbc.driver.T4C8Oall.getNumRows(T4C8Oall.java:977)
at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:1363)
...
Run Code Online (Sandbox Code Playgroud)

这是代码(我正在使用Hibernate):

    Session session = (Session) HibernateUtil.currentSession();

    final Transaction transaction = session.beginTransaction();

    try {
        session.doWork(new Work() {

            public void execute(Connection connection) throws SQLException {
                try {
                    CallableStatement call = connection.prepareCall("{?,? = call geneva_admin.bksgnvcrmps.createorreturnproduct1nc(" +
                            "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?," +
                            "?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?," +
                            "?,?,?,?,?,?,?,?,?,?,?,?)}");

                    int i = 1;

                    call.registerOutParameter(i++, Types.INTEGER);
                    call.registerOutParameter(i++, Types.VARCHAR);


                    call.setString(i++, typeofproduct);
                    call.setString(i++, shiptositenumber);
                    call.setString(i++, billtositenumber);
                    call.setString(i++, ordernumber);
                    call.setInt(i++, orderid);
                    ...
                    call.setInt(i++, errcode);
                    call.setString(i++, errmsg);

                    call.execute();

                    System.out.println("err_code: " + call.getString(1));
                    System.out.println("err_msg: " + call.getString(2)); …
Run Code Online (Sandbox Code Playgroud)

stored-procedures jdbc ora-00911 callable-statement

4
推荐指数
1
解决办法
4267
查看次数

无法通过ODP.NET执行SQL查询 - 无效的字符错误

我正在尝试通过ODP.NET执行SQL查询来创建表,但我总是得到一个ORA-00911'无效字符'错误.即使SQL查询本身没有换行符,异常中的Errors对象也始终具有文本"ORA-00911:invalid character \n".

我正在执行SQL的代码是这样的:

using (OracleConnection conn = new OracleConnection(<connection string>) {
using (OracleCommand command = conn.CreateCommand()) {
    conn.Open();
    command.CommandText = queryString;

    command.ExecuteNonQuery();         // exception always gets thrown here
}
Run Code Online (Sandbox Code Playgroud)

queryString包含一个CREATE TABLE语句,在通过SQL Developer执行时可以正常工作

编辑:我正在执行的SQL是这样的:

CREATE TABLE "TESTSYNC"."NEWTABLE" (
  "COL1" NUMBER(*,0) NULL,
  "COL2" NUMBER(*,0) NULL
);
Run Code Online (Sandbox Code Playgroud)

删除了换行符

oracle odp.net ora-00911

3
推荐指数
1
解决办法
4951
查看次数

Oracle Query在eclipse中没有正确执行

我在Eclipse中执行一个简单的数据库查询:

statement.executeUpdate(
    "INSERT INTO DBUSER(USER_ID,USERNAME,CREATED_BY,CREATED_DATE) 
    VALUES (3,'KUMAR','ERPDIRECT',to_date('29/08/2011', 'dd/mm/yyyy'));"
);
Run Code Online (Sandbox Code Playgroud)

但我得到:

ORA-00911:无效的字符错误

但是当在sql*plus命令行中执行此查询时,它正在执行而不会失败.

eclipse oracle jdbc ora-00911

3
推荐指数
1
解决办法
914
查看次数

如何连接到oracle数据库:((

我尝试连接到oracle 11g,但我有问题并收到以下错误.错误显示我的sql语法必须有问题,但我在oracle sql developer中运行它.查询是对的请帮我解决这个问题
谢谢.

 try {
                string oradb = "Data Source=(DESCRIPTION="
             + "(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx-PC)(PORT=1521)))"
             + "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)));"
             + "User Id=xxxx;Password=123456;";

                OracleConnection con = new OracleConnection();
                con.ConnectionString = oradb;

                //String command = "Select Object_name,status from object_name where object_type='" + object_typeCB.SelectedText + "'";


                string command = "select column1,column2,column3 from table1;";

                OracleDataAdapter oda = new OracleDataAdapter();

                oda.SelectCommand = new OracleCommand();
                oda.SelectCommand.Connection = con;
                oda.SelectCommand.CommandText = command;
                con.Open();
                oda.SelectCommand.ExecuteNonQuery();
                DataSet ds = new DataSet();
                oda.Fill(ds);
                dataGridView1.DataSource = ds;
                con.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString()+Environment.NewLine+ …
Run Code Online (Sandbox Code Playgroud)

sql oracle oracle11g ora-00911

2
推荐指数
1
解决办法
1434
查看次数