Oracle Issues....

67 views
Skip to first unread message

embers...@gmail.com

unread,
Aug 18, 2015, 6:42:33 PM8/18/15
to Slick / ScalaQuery
Does anyone use the Oracle Slick driver combination?

Below is some sql and scala code that worked just fine
with a MySql (mariadb) database, but fails on a very simple
operation with Oracle.
It should be noted that with MySql AUTOINCREMENT was used
where as with Oracle one has to create a sequence and a trigger...
but, hey, I can not be the first person to do this.

XXXXXXXXXXXXXXXXXXXXXXXXXXXX
Slick/Oracle Jar files:

SLICK_JAR=$SCALA_HOME/../jars/slick/slick_2.11-3.0.0.jar
SLICK_CODEGEN_JAR=$SCALA_HOME/../jars/slick/slick-codegen_2.11-3.0.0.jar
SLICK_EXTENSIONS_JAR=$SCALA_HOME/../jars/slick/slick-extensions_2.11-3.0.0.jar
OJDBC_JAR=$HOME/jars/ojdbc7.jar

XXXXXXXXXXXXXXXXXXXXXXXXXXXX
Sql:

DROP TABLE Machine CASCADE CONSTRAINTS;
DROP SEQUENCE Machine_seq;

CREATE TABLE Machine (
  id                            INT NOT NULL,
  name                          VARCHAR(40) NOT NULL,
  cpu_type                      VARCHAR(40),
  cpu_model                     VARCHAR(40),
  cpu_speed                     VARCHAR(20),
  bridge                        VARCHAR(60),
  CONSTRAINT machine_id_pk      PRIMARY KEY(id),
  CONSTRAINT machine_name_ix    UNIQUE(name)
);

CREATE SEQUENCE Machine_seq;

CREATE OR REPLACE TRIGGER Machine_trigger
BEFORE INSERT ON Machine
FOR EACH ROW
BEGIN
  SELECT Machine_seq.NEXTVAL
  INTO   :new.id
  FROM   dual;
END;
/

XXXXXXXXXXXXXXXXXXXXXXXXXXXX
Scala code:

  // This fails for any combination of values (all None, all Some, or mixed)
   val name: String = "dtx_14"
   val cpu_type: Option[String] = Some("Intel")
   val cpu_model: Option[String] = None
   val cpu_speed: Option[String] = None
   val bridge: Option[String] = Some("sandy")

    DB.withSession{ implicit session =>
      Tables.Machine.map(r =>
      (
        r.name,
        r.cpuType,
        r.cpuModel,
        r.cpuSpeed,
        r.bridge
      )
      ) += (
        name,
        cpu_type,
        cpu_model,
        cpu_speed,
        bridge
      )
    }


XXXXXXXXXXXXXXXXXXXXXXXXXXXX
Exception:

java.sql.SQLSyntaxErrorException: ORA-00911: invalid character

  at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
  at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399)
  at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1059)
  at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:522)
  at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257)
  at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:587)
  at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:225)
  at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:53)
  at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:943)
  at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1150)
  at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:4798)
  at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:4875)
  at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1361)
  at slick.driver.JdbcInsertInvokerComponent$BaseInsertInvoker$$anonfun$internalInsert$1.apply(JdbcInsertInvokerComponent.scala:190)
  at slick.driver.JdbcInsertInvokerComponent$BaseInsertInvoker$$anonfun$internalInsert$1.apply(JdbcInsertInvokerComponent.scala:187)
  at slick.jdbc.JdbcBackend$SessionDef$class.withPreparedStatement(JdbcBackend.scala:302)
  at slick.jdbc.JdbcBackend$BaseSession.withPreparedStatement(JdbcBackend.scala:386)
  at slick.driver.JdbcInsertInvokerComponent$BaseInsertInvoker.preparedInsert(JdbcInsertInvokerComponent.scala:177)
  at slick.driver.JdbcInsertInvokerComponent$BaseInsertInvoker.internalInsert(JdbcInsertInvokerComponent.scala:187)
  at slick.driver.JdbcInsertInvokerComponent$BaseInsertInvoker.insert(JdbcInsertInvokerComponent.scala:182)
  at slick.driver.JdbcInsertInvokerComponent$InsertInvokerDef$class.$plus$eq(JdbcInsertInvokerComponent.scala:72)
  at slick.driver.JdbcInsertInvokerComponent$BaseInsertInvoker.$plus$eq(JdbcInsertInvokerComponent.scala:152)
  at Main$$anon$1$$anonfun$load_machine_data$1$$anonfun$apply$60.apply(OImportPara.sh:2763)
  at Main$$anon$1$$anonfun$load_machine_data$1$$anonfun$apply$60.apply(OImportPara.sh:2754)
  ............

XXXXXXXXXXXXXXXXXXXXXXXXXXXX

Googling about,
  ORA-00911: invalid character
happens, for instance, when one creates a statement and include a
trailing ";" within the SQL which is sent via JDBC to the Oracle
database.

Does the slick Oracle driver add some extra characters???

Time is short and if the Slick-Oracle combination is actually
broken, then I must abandon Slick.

Thanks

Richard

embers...@gmail.com

unread,
Aug 19, 2015, 5:35:20 PM8/19/15
to Slick / ScalaQuery

The issue has been solved (thanks for all the response here from typesafe folks).

Clint Gilbert

unread,
Aug 21, 2015, 11:15:18 AM8/21/15
to scala...@googlegroups.com
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

How did you solve it? This might help someone else who has the same
problem.
> <http://new.id> FROM dual; END; /
>
> XXXXXXXXXXXXXXXXXXXXXXXXXXXX Scala code:
>
> // This fails for any combination of values (all None, all Some, or
> mixed) val name: String = "dtx_14" val cpu_type: Option[String] =
> Some("Intel") val cpu_model: Option[String] = None val cpu_speed:
> Option[String] = None val bridge: Option[String] = Some("sandy")
>
> DB.withSession{ implicit session => Tables.Machine.map(r => (
> r.name <http://r.name>, r.cpuType, r.cpuModel, r.cpuSpeed,
> --
>
> --- You received this message because you are subscribed to the
> Google Groups "Slick / ScalaQuery" group. To unsubscribe from this
> group and stop receiving emails from it, send an email to
> scalaquery+...@googlegroups.com
> <mailto:scalaquery+...@googlegroups.com>. To view this
> discussion on the web visit
> https://groups.google.com/d/msgid/scalaquery/7e77c471-8a3f-4d69-9de7-1
03b2cf3a211%40googlegroups.com
>
>
<https://groups.google.com/d/msgid/scalaquery/7e77c471-8a3f-4d69-9de7-10
3b2cf3a211%40googlegroups.com?utm_medium=email&utm_source=footer>.
> For more options, visit https://groups.google.com/d/optout.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.22 (GNU/Linux)

iQIcBAEBAgAGBQJV10CDAAoJEBnktRkJHUgsTLwP/joRPbQNOR6j/XqrcS0ehFO0
JUCQ82aM1/TDai6/sdPRMepfDSztLvw37dzBMrW4qWsNp1de0jUiY+WjdjeCjSav
GLtUDg+4B3htjoCpCzG7J9ZEeJXjh2K4JV1wY0HuZ7IsDxUHnDNgHJb1GPM3C4pT
US2DUXAaMXVj4CARxjqq8sqP0fjmVUC5qXc6hiD7iAT4bIT5dYxV9wqLpdUlPzxM
tBNHJ75DrRSvaQ5LrKZghOyNfnDCdr9N/JNnw5JHFsUQcAOOeA4YkB2MBwm6e4ak
vMy/U6ZCkRI+qMWdDQidPJPoJAOnFeFk4K0hfvAyZSC3IuLhu8ZxTFT60TXTvss9
oeO5zo3g8ZPrDDGED58jHTWO3zE6sOoxYhUuSgEEe8b6Yl7WvpTH5S+aSUjNwqef
u9BztaN+1fYqPADK1RaLhArPy7iTFc3ymUlxCA+P0ETUvROhcgFgqUMV/8BWrQlW
aZBLM2bThzWtiu2A+Ss8fMlOU9VhpmGPNCflTNQ55O0ymOkC6GXE0X0HHN7hyn4I
1qCkXqVFHV8HRmyvnnG9KyGMDuhPdludY93R3Rvxlbli8sT18eQ7myNAvfbi+hJM
pHnvHFkQ3BQvJVLdmhJH5gbrJnAGKry00wt49kYvQjyQ79IxpTAubDogbyklmyWd
Kl+5t6gc1Ulr2Cy7Dn2x
=pnAx
-----END PGP SIGNATURE-----
Reply all
Reply to author
Forward
0 new messages