SQLJ vs PLSQL

Hi All,
Does Oracle have a medium to long term policy about which language will be used within the database?
Will SQLJ eventually phase out PLSQL?
I was always a fan of PLSQL, but I have found SQLJ to be equally as good a server based langauge. Coupled with the fact that it can be recompiled against other databases, it should solve the issues that arise when developers are asked to write stored procedure code in PLSQL and Sybase's TransactSQL in the same project.
However, I have noticed that SQLJ has not been accepted by the development community as a well as I would have imagined. I have worked on three projects using SQLJ, however I was responsible for introducing SQLJ in each case.
Friends and colleagues still regard PLSQL as the better language, even though they are using Java in the other tiers within their applications. In many cases, they are not aware of the benefits of SQLJ and are wary of a possible steep learning curve.
I wonder if anyone else has similar ideas/comments on the use of PLSQL and SQLJ, what would you recommend for new project development?
Regards,
Colin Smith

SQLJ and JDBC are ways to access the database - from the client, from the middle tier, or from inside the database server itself.
JDBC is an API specified by Sun as part of Java, while SQLJ is an ANSI (soon ISO) standard for embedding SQL in Java.
JDBC is more widespread, while SQLJ is a more productive environment.
Stored procedures are pieces of code executed in the database as part of your database session. In Oracle Databases, stored procedures are usually written either in PL/SQL (a propertietary Oracle language) or in Java. If you write your stored procedure in Java you use JDBC or SQLJ to access the database - essentially the same code you would write on the client or in a middle-tier.

Similar Messages

  • 9.0.3 plsql web service bug?

    I've been building plsql web services for several days, and everything has been fine. I've been adding new functions on the database side, and editing my web services using the JDev wizard.
    Now it's all stopped working, and I'm getting an "unexpected error" every time I try to generate the service. The "details" for the error looks like the stuff at the end of this message.
    Before this happened, I did two potentially problematic things. I was (I thought) done with my testing, so I was cleaning up. So, I removed some functions on the plsql side. And I also did "remove from IDE" for my existing web service project, so I could start building a clean version that had just what I needed. It was when creating the fresh web service in the new project that things exploded.
    As far as I can tell from the IDE, it generates the various serialization/deserialization files and the main web service class but fails before it can create the WSDL, web.xml, and deployment stuff.
    -- jim
    java.io.FileNotFoundException: /C:/Data/jdev9i/NEIEN1/Project1/src/__temp_java_wrappers/factlocal/Pk_web_service_test1.java (The system cannot find the file specified.
         void java.io.FileInputStream.open(java.lang.String)
              native code
         void java.io.FileInputStream.<init>(java.lang.String)
              FileInputStream.java:64
         java.io.InputStream oracle.ide.net.FileURLFileSystemHelper.openInputStream.java.net.URL)
              FileURLFileSystemHelper.java:415
         java.io.InputStream oracle.ide.net.URLFileSystem.openInputStream(java.net.URL)
              URLFileSystem.java:955
         void oracle.jdevimpl.webservices.generator.WrapperClassGenerator$1.run()
              WrapperClassGenerator.java:315
         void oracle.jdevimpl.webservices.util.ThreadUtil$NonThrowingRunnable.run()
              ThreadUtil.java:106
         void java.awt.event.InvocationEvent.dispatch()
              InvocationEvent.java:147
         void java.awt.EventQueue.dispatchEvent(java.awt.AWTEvent)
              EventQueue.java:337
         boolean java.awt.EventDispatchThread.pumpOneEventForHierarchy(java.awt.Component)
              EventDispatchThread.java:131
         void java.awt.EventDispatchThread.pumpEventsForHierarchy(java.awt.Conditional, java.awt.Component)
              EventDispatchThread.java:98
         void java.awt.Dialog.show()
              Dialog.java:380
         void java.awt.Component.show(boolean)
              Component.java:946
         void java.awt.Component.setVisible(boolean)
              Component.java:903
         boolean oracle.bali.ewt.dialog.JEWTDialog.runDialog()
         void oracle.ide.dialogs.ProgressBar.start(java.lang.String, java.lang.String)
              ProgressBar.java:274
         void oracle.jdevimpl.webservices.generator.SPWebServiceGenerator.generate(oracle.jdevimpl.webservices.wizard.publish.SPPublishModel, oracle.jdevimpl.webservices.util.JavaXSDTypeMap)
              SPWebServiceGenerator.java:187
         void oracle.jdevimpl.webservices.wizard.SPWebServicePublishWizard.wizardFinished(oracle.bali.ewt.wizard.WizardEvent)
              SPWebServicePublishWizard.java:391
         void oracle.bali.ewt.wizard.BaseWizard.processWizardEvent(oracle.bali.ewt.wizard.WizardEvent)
         void oracle.bali.ewt.wizard.BaseWizard.processEventImpl(java.awt.AWTEvent)
         void oracle.bali.ewt.LWComponent.processEvent(java.awt.AWTEvent)
         void oracle.bali.ewt.wizard.BaseWizard.doFinish()
         void oracle.bali.ewt.wizard.BaseWizard$Action.actionPerformed(java.awt.event.ActionEvent)
         void javax.swing.AbstractButton.fireActionPerformed(java.awt.event.ActionEvent)
              AbstractButton.java:1450
         void javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(java.awt.event.ActionEvent)
              AbstractButton.java:1504
         void javax.swing.DefaultButtonModel.fireActionPerformed(java.awt.event.ActionEvent)
              DefaultButtonModel.java:378
         void javax.swing.DefaultButtonModel.setPressed(boolean)
              DefaultButtonModel.java:250
         void javax.swing.plaf.basic.BasicButtonListener.mouseReleased(java.awt.event.MouseEvent)
              BasicButtonListener.java:216
         void java.awt.Component.processMouseEvent(java.awt.event.MouseEvent)
              Component.java:3715
         void java.awt.Component.processEvent(java.awt.AWTEvent)
              Component.java:3544
         void java.awt.Container.processEvent(java.awt.AWTEvent)
              Container.java:1164
         void java.awt.Component.dispatchEventImpl(java.awt.AWTEvent)
              Component.java:2593
         void java.awt.Container.dispatchEventImpl(java.awt.AWTEvent)
              Container.java:1213
         void java.awt.Component.dispatchEvent(java.awt.AWTEvent)
              Component.java:2497
         void java.awt.LightweightDispatcher.retargetMouseEvent(java.awt.Component, int, java.awt.event.MouseEvent)
              Container.java:2451
         boolean java.awt.LightweightDispatcher.processMouseEvent(java.awt.event.MouseEvent)
              Container.java:2216
         boolean java.awt.LightweightDispatcher.dispatchEvent(java.awt.AWTEvent)
              Container.java:2125
         void java.awt.Container.dispatchEventImpl(java.awt.AWTEvent)
              Container.java:1200
         void java.awt.Window.dispatchEventImpl(java.awt.AWTEvent)
              Window.java:922
         void java.awt.Component.dispatchEvent(java.awt.AWTEvent)
              Component.java:2497
         void java.awt.EventQueue.dispatchEvent(java.awt.AWTEvent)
              EventQueue.java:339
         boolean java.awt.EventDispatchThread.pumpOneEventForHierarchy(java.awt.Component)
              EventDispatchThread.java:131
         void java.awt.EventDispatchThread.pumpEventsForHierarchy(java.awt.Conditional, java.awt.Component)
              EventDispatchThread.java:98
         void java.awt.Dialog.show()
              Dialog.java:380
         void java.awt.Component.show(boolean)
              Component.java:946
         void java.awt.Component.setVisible(boolean)
              Component.java:903
         boolean oracle.bali.ewt.wizard.WizardDialog.runDialog()
         boolean oracle.ide.wizard.TitledWizardDialog.runDialog()
              TitledWizardDialog.java:147
         boolean oracle.jdevimpl.webservices.wizard.SPWebServicePublishWizard.runWizard()
              SPWebServicePublishWizard.java:404
         boolean oracle.jdevimpl.webservices.wizard.SPWebServicePublish.invoke(oracle.ide.addin.Context, java.lang.String[])
              SPWebServicePublish.java:221
         void oracle.ide.WizardManager$1.run()
              WizardManager.java:450
         void java.awt.event.InvocationEvent.dispatch()
              InvocationEvent.java:154
         void java.awt.EventQueue.dispatchEvent(java.awt.AWTEvent)
              EventQueue.java:337
         boolean java.awt.EventDispatchThread.pumpOneEventForHierarchy(java.awt.Component)
              EventDispatchThread.java:131
         void java.awt.EventDispatchThread.pumpEventsForHierarchy(java.awt.Conditional, java.awt.Component)
              EventDispatchThread.java:98
         void java.awt.EventDispatchThread.pumpEvents(java.awt.Conditional)
              EventDispatchThread.java:93
         void java.awt.EventDispatchThread.run()
              EventDispatchThread.java:85

    Could be. Here's what the console has on it. Of course, contrary to the message, it is an Oracle database. Good luck!
    Invoking JPublisher with command line:
    -user=w19572/w19572
    -driver=oracle.jdbc.driver.OracleDriver
    -url=jdbc:oracle:thin:@localhost:1521:HUDSOJ
    -numbertypes=objectjdbc
    -lobtypes=jdbc
    -usertypes=oracle
    -builtintypes=jdbc
    -case=mixed
    -encoding=Cp1252
    -methods=named
    -plsqlmap=true
    -transitive=true
    -omit_schema_names
    -dir=C:\Data\jdev9i\NEIEN1\Project1\src\__temp_java_wrappers
    -package=factlocal
    -input=C:\TEMP\input59112.jpub
    C:\Data\jdev9i\NEIEN1\Project1\src\__temp_java_wrappers\factlocal\Pk_web_service
    _test2.sqlj:43.5-44.17: Warning: You are using an Oracle JDBC driver, but connec
    ting to an non-Oracle database. SQLJ will perform JDBC-generic SQL checking.
    C:\Data\jdev9i\NEIEN1\Project1\src\__temp_java_wrappers\factlocal\Pk_web_service
    test2.sqlj:43.5-44.17: Error: Not found: PKWEB_SERVICE_TEST2.FID_TO_NAME. Ther
    e is no stored procedure or function of this name.
    C:\Data\jdev9i\NEIEN1\Project1\src\__temp_java_wrappers\factlocal\Pk_web_service
    test2.sqlj:53.5-54.17: Error: Not found: PKWEB_SERVICE_TEST2.FID_TO_SIC. There
    is no stored procedure or function of this name.
    C:\Data\jdev9i\NEIEN1\Project1\src\__temp_java_wrappers\factlocal\Pk_web_service
    test2.sqlj:63.5-64.17: Error: Not found: PKWEB_SERVICE_TEST2.FID_TO_SICLIST. T
    here is no stored procedure or function of this name.
    C:\Data\jdev9i\NEIEN1\Project1\src\__temp_java_wrappers\factlocal\Pk_web_service
    test2.sqlj:73.5-74.17: Error: Not found: PKWEB_SERVICE_TEST2.FID_TO_SIC_TABLE.
    There is no stored procedure or function of this name.
    C:\Data\jdev9i\NEIEN1\Project1\src\__temp_java_wrappers\factlocal\Pk_web_service
    test2.sqlj:83.5-84.15: Error: Not found: PKWEB_SERVICE_TEST2.FID_TO_WHEREDATA.
    There is no stored procedure or function of this name.
    C:\Data\jdev9i\NEIEN1\Project1\src\__temp_java_wrappers\factlocal\Pk_web_service
    test2.sqlj:94.5-96.21: Error: Not found: PKWEB_SERVICE_TEST2.UPDATE_NAME. Ther
    e is no stored procedure or function of this name.
    Total 6 errors and 1 warning.

  • Urgent - Error calling web service generated from plsql package

    Hi,
    I am using Jdeveloper 10.1.3 production release.
    I am trying to publish a plsql packaged procedure as a web service.
    My first question is -
    When I am publishing the plsql API as a WS, should I choose the style Document/Wrapped or RPC Literal? Document Wrapped is the default in the wizard.
    My second question - Depending on whether I choose Document/Wrapped or RPC Literal style, I get 2 different errors when I try to run the client java file (generated by Jdeveloper) that calls the web service. The client java compiles successfully but when I run I get these messages:
    Document/Wrapped error -
    D:\jdev1013\jdk\bin\javaw.exe -ojvm -classpath H:\jdevhome\jdev\mywork\Genesis\Test\classes;D:\jdev1013\sqlj\lib\runtime12.jar;D:\jdev1013\jdbc\lib\ojdbc14dms.jar;D:\jdev1013\jdbc\lib\orai18n.jar;D:\jdev1013\jdbc\lib\ocrs12.jar;D:\jdev1013\diagnostics\lib\ojdl.jar;D:\jdev1013\lib\dms.jar;D:\jdev1013\jdev\lib\jdev-rt.jar;D:\jdev1013\webservices\lib\soap.jar;D:\jdev1013\webservices\lib\saaj-api.jar;D:\jdev1013\lib\xmlparserv2.jar;D:\jdev1013\jlib\javax-ssl-1_1.jar;D:\jdev1013\jlib\jssl-1_1.jar;D:\jdev1013\j2ee\home\lib\activation.jar;D:\jdev1013\j2ee\home\lib\mail.jar;D:\jdev1013\j2ee\home\lib\http_client.jar;D:\jdev1013\webservices\lib\jaxrpc-api.jar;D:\jdev1013\webservices\lib\wsclient.jar;D:\jdev1013\webservices\lib\wsserver.jar;D:\jdev1013\webservices\lib\wssecurity.jar;D:\jdev1013\webservices\lib\wsdl.jar;D:\jdev1013\webservices\lib\orasaaj.jar;D:\jdev1013\webservices\lib\orawsdl.jar;D:\jdev1013\webservices\lib\orawsrm.jar;D:\jdev1013\webservices\lib\jaxr_api.jar;D:\jdev1013\webservices\lib\orajaxr.jar;D:\jdev1013\webservices\lib\relaxngDatatype.jar;D:\jdev1013\webservices\lib\jaxb-impl.jar;D:\jdev1013\webservices\lib\jaxb-libs.jar;D:\jdev1013\webservices\lib\xsdlib.jar;D:\jdev1013\webservices\lib\mdds.jar;D:\jdev1013\jlib\jaxen.jar;D:\jdev1013\jlib\oraclepki.jar;D:\jdev1013\jlib\ojpse.jar;D:\jdev1013\jlib\osdt_core.jar;D:\jdev1013\jlib\osdt_cert.jar;D:\jdev1013\jlib\osdt_xmlsec.jar;D:\jdev1013\jlib\osdt_wss.jar;D:\jdev1013\jlib\osdt_saml.jar;D:\jdev1013\jlib\repository.jar;D:\jdev1013\jlib\ojmisc.jar;D:\jdev1013\j2ee\home\jazncore.jar;D:\jdev1013\j2ee\home\oc4jclient.jar;D:\jdev1013\rdbms\jlib\xdb.jar;D:\jdev1013\diagnostics\lib\ojdl2.jar;D:\jdev1013\lib\xsu12.jar;D:\jdev1013\lib\xml.jar;D:\jdev1013\j2ee\home\lib\ejb.jar;D:\jdev1013\j2ee\home\lib\jms.jar;D:\jdev1013\j2ee\home\lib\jta.jar;D:\jdev1013\j2ee\home\lib\servlet.jar;D:\jdev1013\jakarta-taglibs\commons-logging-1.0.3\commons-logging-api.jar;D:\jdev1013\jakarta-taglibs\commons-logging-1.0.3\commons-logging.jar;D:\jdev1013\j2ee\home\lib\ojsp.jar;D:\jdev1013\j2ee\home\jsp\lib\taglib\ojsputil.jar;D:\jdev1013\j2ee\home\oc4j.jar;D:\jdev1013\j2ee\home\lib\oc4j-internal.jar;D:\jdev1013\jdev\lib\ojc.jar genc2dv1.TestWebServiceSoapHttpPortClient
    calling http://rchellam-PC1:8888/Genesis-Test-context-root/TestWebServiceSoapHttpPort
    java.rmi.RemoteException: Error parsing envelope: (1, 1) Start of root element expected.; nested exception is:
         javax.xml.soap.SOAPException: Error parsing envelope: (1, 1) Start of root element expected.
         at test.proxy.runtime.TestWebServiceSoapHttp_Stub.getAttributes(TestWebServiceSoapHttp_Stub.java:157)
         at genc2dv1.TestWebServiceSoapHttpPortClient.getAttributes(TestWebServiceSoapHttpPortClient.java:46)
         at genc2dv1.TestWebServiceSoapHttpPortClient.main(TestWebServiceSoapHttpPortClient.java:29)
    Caused by: javax.xml.soap.SOAPException: Error parsing envelope: (1, 1) Start of root element expected.
         at oracle.j2ee.ws.saaj.soap.soap11.SOAPImplementation11.createEnvelope(SOAPImplementation11.java:104)
         at oracle.j2ee.ws.saaj.soap.SOAPPartImpl.getEnvelope(SOAPPartImpl.java:76)
         at oracle.j2ee.ws.saaj.soap.MessageImpl.getSOAPBody(MessageImpl.java:713)
         at oracle.j2ee.ws.client.StreamingSender._preHandlingHook(StreamingSender.java:673)
         at oracle.j2ee.ws.client.StubBase._preHandlingHook(StubBase.java:664)
         at oracle.j2ee.ws.client.StreamingSender._sendImpl(StreamingSender.java:201)
         at oracle.j2ee.ws.client.StreamingSender._send(StreamingSender.java:111)
         at test.proxy.runtime.TestWebServiceSoapHttp_Stub.getAttributes(TestWebServiceSoapHttp_Stub.java:134)
         ... 2 more
    Caused by: oracle.xml.parser.v2.XMLParseException: Start of root element expected.
         at oracle.xml.parser.v2.XMLError.flushErrors1(XMLError.java:320)
         at oracle.xml.parser.v2.NonValidatingParser.parseRootElement(NonValidatingParser.java:333)
         at oracle.xml.parser.v2.NonValidatingParser.parseDocument(NonValidatingParser.java:295)
         at oracle.xml.parser.v2.XMLParser.parse(XMLParser.java:201)
         at oracle.j2ee.ws.saaj.soap.soap11.SOAPImplementation11.createEnvelope(SOAPImplementation11.java:78)
         ... 9 more
    Process exited with exit code 0.
    RPC Literal error -
    D:\jdev1013\jdk\bin\javaw.exe -ojvm -classpath H:\jdevhome\jdev\mywork\Genesis\Test\classes;D:\jdev1013\sqlj\lib\runtime12.jar;D:\jdev1013\jdbc\lib\ojdbc14dms.jar;D:\jdev1013\jdbc\lib\orai18n.jar;D:\jdev1013\jdbc\lib\ocrs12.jar;D:\jdev1013\diagnostics\lib\ojdl.jar;D:\jdev1013\lib\dms.jar;D:\jdev1013\jdev\lib\jdev-rt.jar;D:\jdev1013\webservices\lib\soap.jar;D:\jdev1013\webservices\lib\saaj-api.jar;D:\jdev1013\lib\xmlparserv2.jar;D:\jdev1013\jlib\javax-ssl-1_1.jar;D:\jdev1013\jlib\jssl-1_1.jar;D:\jdev1013\j2ee\home\lib\activation.jar;D:\jdev1013\j2ee\home\lib\mail.jar;D:\jdev1013\j2ee\home\lib\http_client.jar;D:\jdev1013\webservices\lib\jaxrpc-api.jar;D:\jdev1013\webservices\lib\wsclient.jar;D:\jdev1013\webservices\lib\wsserver.jar;D:\jdev1013\webservices\lib\wssecurity.jar;D:\jdev1013\webservices\lib\wsdl.jar;D:\jdev1013\webservices\lib\orasaaj.jar;D:\jdev1013\webservices\lib\orawsdl.jar;D:\jdev1013\webservices\lib\orawsrm.jar;D:\jdev1013\webservices\lib\jaxr_api.jar;D:\jdev1013\webservices\lib\orajaxr.jar;D:\jdev1013\webservices\lib\relaxngDatatype.jar;D:\jdev1013\webservices\lib\jaxb-impl.jar;D:\jdev1013\webservices\lib\jaxb-libs.jar;D:\jdev1013\webservices\lib\xsdlib.jar;D:\jdev1013\webservices\lib\mdds.jar;D:\jdev1013\jlib\jaxen.jar;D:\jdev1013\jlib\oraclepki.jar;D:\jdev1013\jlib\ojpse.jar;D:\jdev1013\jlib\osdt_core.jar;D:\jdev1013\jlib\osdt_cert.jar;D:\jdev1013\jlib\osdt_xmlsec.jar;D:\jdev1013\jlib\osdt_wss.jar;D:\jdev1013\jlib\osdt_saml.jar;D:\jdev1013\jlib\repository.jar;D:\jdev1013\jlib\ojmisc.jar;D:\jdev1013\j2ee\home\jazncore.jar;D:\jdev1013\j2ee\home\oc4jclient.jar;D:\jdev1013\rdbms\jlib\xdb.jar;D:\jdev1013\diagnostics\lib\ojdl2.jar;D:\jdev1013\lib\xsu12.jar;D:\jdev1013\lib\xml.jar;D:\jdev1013\j2ee\home\lib\ejb.jar;D:\jdev1013\j2ee\home\lib\jms.jar;D:\jdev1013\j2ee\home\lib\jta.jar;D:\jdev1013\j2ee\home\lib\servlet.jar;D:\jdev1013\jakarta-taglibs\commons-logging-1.0.3\commons-logging-api.jar;D:\jdev1013\jakarta-taglibs\commons-logging-1.0.3\commons-logging.jar;D:\jdev1013\j2ee\home\lib\ojsp.jar;D:\jdev1013\j2ee\home\jsp\lib\taglib\ojsputil.jar;D:\jdev1013\j2ee\home\oc4j.jar;D:\jdev1013\j2ee\home\lib\oc4j-internal.jar;D:\jdev1013\jdev\lib\ojc.jar genc2dv1.TestWebService2SoapHttpPortClient
    calling http://rchellam-PC1:8888/Genesis-Test-context-root/TestWebService2SoapHttpPort
    unexpected null value for literal data
         at oracle.j2ee.ws.common.util.exception.JAXRPCExceptionBase.<init>(JAXRPCExceptionBase.java:52)
         at oracle.j2ee.ws.common.encoding.SerializationException.<init>(SerializationException.java:26)
         at oracle.j2ee.ws.common.encoding.literal.LiteralObjectSerializerBase.internalSerialize(LiteralObjectSerializerBase.java:191)
         at oracle.j2ee.ws.common.encoding.literal.LiteralObjectSerializerBase.serialize(LiteralObjectSerializerBase.java:137)
         at test.proxy.runtime.TestWebService2SoapHttp_getAttributes_ReqS_LiteralSerializer.doSerialize(TestWebService2SoapHttp_getAttributes_ReqS_LiteralSerializer.java:154)
         at oracle.j2ee.ws.common.encoding.literal.LiteralObjectSerializerBase.internalSerialize(LiteralObjectSerializerBase.java:199)
         at oracle.j2ee.ws.common.encoding.literal.LiteralObjectSerializerBase.serialize(LiteralObjectSerializerBase.java:137)
         at oracle.j2ee.ws.client.StreamingSender._writeRequest(StreamingSender.java:625)
         at oracle.j2ee.ws.client.StreamingSender._sendImpl(StreamingSender.java:137)
         at oracle.j2ee.ws.client.StreamingSender._send(StreamingSender.java:111)
         at test.proxy.runtime.TestWebService2SoapHttp_Stub.getAttributes(TestWebService2SoapHttp_Stub.java:89)
         at genc2dv1.TestWebService2SoapHttpPortClient.getAttributes(TestWebService2SoapHttpPortClient.java:57)
         at genc2dv1.TestWebService2SoapHttpPortClient.main(TestWebService2SoapHttpPortClient.java:32)
    Process exited with exit code 0.
    Now all the classes are generated by JDeveloper automatically from the plsql API. So I am not sure why the errors occur and how to fix these.
    Also, these errors are occurring on plsql APIs that have input or output parameters of plsql record type or pslql table of record type. These errors don't occur if the api is simple with scalar input or output parameters only.
    I would appreciate any help on how to resolve these errors.
    Thanks,
    Raji

    Hi,
    I'm wondering if the problem is actually that the client is failing to connect to the server correctly. Can I suggest that you switch on the HTTP Analyzer and see what comes back there.
    Is it possible it is a proxy problem? If you are working locally then I first suggest that you ensure that the Web Browser Proxy is off (see Tools -> Preferences -> Web Browser Proxy) - and that there are no exceptions listed (either with the proxy on or off) before you start the HTTP Analyzer.
    As to Doc/Wrapped or RPC. see this blog entry for a little more explanation:
    http://susanduncan.blogspot.com/2006/05/rpc-document-bare-wrapped-literal-get.html
    regards
    Susan

  • SQLJ error in stored procedure

    Okay I'm kind of new to this stuff so this is probably an easy
    question but I can't fix my current problem. Know I have been
    creating and compiling several java stored procedures in my
    oracle 8.1.7.0.0 enterprise edition database. So far everything
    is create I have created about a dozen and done all of their
    call specs and everything works without a hitch.
    The problem I have came into being when I tried to create a
    stored procedure that uses SQLJ. When I create my stored
    procedures I compile my java code straight into the database
    using the
    CREATE OR REPLACE AND COMPILE JAVA SOURCE named "myClass" AS
    source
    this has always worked from me except when I place my
    #sql ; lines at which point it issues a the following error
    SP2-7034 : unknown command beginning
    at which point is it ignores the line of code and continues to
    compile my java source. Does this mean the SQLJ is not enabled
    in my database or what? I have checked out the SQLJ developer&#8217;s
    hand book and it did not help me with this problem. Oh please
    wont some wise oracle god help me!

    user21354 wrote:
    i am creating the collection in my Stored procedure it is giving me this error
    declare
    type t_number is table of number;
    v_numbers t_number;
    begin
    select VISIT_ID
    bulk collect into v_numbers
    from visit
    where VISITTYPEID = 2;
    select VISIT_ID from v_numbers;
    end;
    error
    PL/SQL: ORA-00942: table or view does not exist
    please tell me this why this happeningcouple of things...
    context switching - Your second 'select visit_id' query is actually parsed outside plsql, in the 'sql engine'. This sql engine has no knowledge of what v_numbers is, it's expecting an actual table name but it can't find anything called v_numbers in it's metadata. So it bombs out with that error. Google 'context switching plsql' for more info. :o)
    - as v_numbers is a collection, you could just loop through the results:
      for n in 1..v_numbers.count
      loop
        dbms_output.put_line(v_numbers(n));
      end loop;- as stated above, a 'select' without 'into' won't work in plsql anyway.
    - there is a way of getting round the context switch, by creating your Type in sql rather than plsql and 'casting' it to a table. Let us know if you want to know the steps to do it, but try reading up on context switch first.
    cheers.

  • SQLJ JSP and SERVLETS which Environment?

    Hello,
    I am attempting to run the samples on Chapter 5 of the
    following documents with partial success.
    http://technet.oracle.com/docs/products/oracle8i/doc_library/817_
    doc/java.817/a83726/oraext2.htm
    http://download-west.oracle.com/otndoc/oracle9i/901_doc/java.901/
    a90208/oraext.htm#1015820
    1. Do I need the Apache+Jserv environment to run SQLJ and JSP?
    2. What do I need to do run SQLJ on oc4j if possible?
    3. I dont know how to load(?) and/or run this .sqljsp file.
    <%@ page language="sqlj"
    import="sqlj.runtime.ref.DefaultContext,oracle.sqlj.runtime.Oracl
    e" %>
    <HTML>
    <HEAD> <TITLE> The SQLJQuery JSP </TITLE> </HEAD>
    <BODY BGCOLOR="white">
    <% String empno = request.getParameter("empno");
    if (empno != null) { %>
    <H3> Employee # <%=empno %> Details: </H3>
    <%= runQuery(empno) %>
    <HR><BR>
    <% } %>
    <B>Enter an employee number:</B>
    <FORM METHOD="get">
    <INPUT TYPE="text" NAME="empno" SIZE=10>
    <INPUT TYPE="submit" VALUE="Ask Oracle");
    </FORM>
    </BODY>
    </HTML>
    <%!
    private String runQuery(String empno) throws
    java.sql.SQLException {
    DefaultContext dctx = null;
    String ename = null; double sal = 0.0; String hireDate = null;
    StringBuffer sb = new StringBuffer();
    try {
    dctx = Oracle.getConnection("jdbc:oracle:oci8:@", "scott",
    "tiger");
    #sql [dctx] {
    select ename, sal, TO_CHAR(hiredate,'DD-MON-YYYY')
    INTO :ename, :sal, :hireDate
    FROM scott.emp WHERE UPPER(empno) = UPPER(:empno)
    sb.append("<BLOCKQUOTE><BIG><B><PRE>\n");
    sb.append("Name : " + ename + "\n");
    sb.append("Salary : " + sal + "\n");
    sb.append("Date hired : " + hireDate);
    sb.append("</PRE></B></BIG></BLOCKQUOTE>");
    } catch (java.sql.SQLException e) {
    sb.append("<P> SQL error: <PRE> " + e + " </PRE> </P>\n");
    } finally {
    if (dctx!= null) dctx.close();
    return sb.toString();
    %>
    I named above file as test2.sqljsp then I tried these procedures:
    a) $ ojspc test2.sqljsp --these created all the files
    b) $ loadjava -u -v scott/tiger _test2.class -resolve
    this generated:
    initialization complete
    loading : _test2
    creating : _test2
    resolver :
    resolving: _test2
    errors : _test2
    ORA-29521: referenced name test2$_jsp_StaticText could not
    be found
    ORA-29521: referenced name test2SJProfileKeys could not be
    found loadjava: 2 errors
    c) listed the directory and both these files are there but it
    cannot resolve or find it?
    d) I recall reading something about publishjsp command but I have
    to establish a session shell with OSE? this part is very
    confusing and am not sure what to do here.
    e) not sure if i need to publish the loaded class (create a
    procedure? so it can be known to the rest of plsql?)
    A step by step procedure is very much appreciated. fyi.. I
    have Oracle 8.1.7, + oc4j, I can run sqlj from command line
    and class files generated I can run. I can also run JSP and
    servlets on the oc4j accessing the database. It is this SQLJ
    that throws me off balance. If you include Jdeveloper steps
    ro run SQLJ thats also welcome.
    Thanks in advance for kind responses posted.

    In many Model-View-Controller web applications implemented using J2EE, servlets are as controllers to direct the flow between the model and view. While servlets can output HTML code directly, it is much better to use JSPs for the most part. JSPs contain HTML and possibly Java scriptlets. The J2EE container will typically compile JSPs into servlets. While you could use a JSP as a controller, there are drawbacks to that approach. To minimize the amount of Java code in your JSPs, you can either use the tags provided by the JSP spec or use tag libraries written by someone else or yourself. See the JSTL for one such example.
    Also see:
    http://wiki.java.net/bin/preview/Javapedia/MVC
    http://wiki.java.net/bin/view/Javapedia/JavaServerPages

  • PLSQL webservice eventually gives java.sql.SQLException: Closed Connection

    Hi
    We have created a web service based on a plsql procedure in jdeveloper 10.1.2.1.0
    We deployed the web service to .ear file in jdev and then deployed that ear file to our 10.1.2 app server.
    The web service works fine for a short time but then gives
    java.sql.SQLException: Closed Connection
    The web service is not used frequently so it's possible the connection is timing out. I haven't tested invoking the web service perodically to see if it remains alive.
    I tried to follow this note on metalink
    https://metalink.oracle.com/metalink/plsql/f?p=130:14:2526430465590485698::::p14_database_id,p14_docid,p14_show_header,p14_show_help,p14_black_frame,p14_font:NOT,370209.1,1,1,1,helvetica
    Which wants me to make changes to the file <webservice_name>Base.java in our case GPAuditBase.java
    My questions are:
    1. In the jdeveloper navigator there is a file called GPAuditBase.sqlj but it does not contain all the code mentioned in the metalink note. Specifically the finally{} section. Do I need to edit the generated GPAuditBase.java that is saved in the src folder for the project? That file seems to contain the code mentioned in the metalink note.
    2. If so, how are those changes reflected in the ear file that I want to deploy to my app server? Do I change the files in the src folder and then deploy to ear in jdev
    thanks
    paul schweiger

    ahem...
    bump

  • Why writing code in SQLJ

    From Oracle vers. 8i on it's possible to write procedures and packages in SQLJ, that is using Java embedded in PL/SQL. Can someone tell me why should a programmer learn to develop in SQLJ? Which are the advantages?.
    I usually write on one side stored procedures or packages in pure PL/SQL stored on Oracle Server and on the other side code in JSP on Client where JSP calls my stored procedures which get the data back to my web page. At this point I'd like to understand which might be the advantage of writing code in SQLJ (Java embedded in PL/SQL). What I mean is why I should take advantages in writing code with Java/PLSQL instead of keeping on writing the Java side only in JSP and writing code on Oracle always in pure PL/SQL.
    Thanks!

    Hello Mark,
    you don't always have a JSP for your Java code. A popular example is reading the contents of a directory. This function is not available in PL/SQL, but can be easily implemented with embedded Java. Or imagine creating or manipulating an image or handling binary Excel files with POI.
    There are many Java functionalities available that are not implemented in PL/SQL and you don't have to reimplement the wheel.
    Regards
    Marcus
    Edited by: Marwim on 12.07.2011 15:10

  • Error while calling a stored procedure using SQLJ

    I am calling a stored procedure defined inside a package through a SQLJ script. The first parameter of that procedure is a IN OUT parameter which is used as a ROWID for creating a cursor. That ROWID value is the same for every record in the table, thereby enabling us to create a cursor.
    When I give a hard-coded value as a parameter, I get an error stating that the assignment is not correct as the query is expecting a variable and not a literal. Hence I removed the hard-coded value and included a dymanic value in the SQLJ call.
    String strVal = "A";
    #sql{CALL ASSIGNMENTS_PKG.INSERT_ROW :{strVal},'SALARY_CODE_GROUP','BU',3,105,sysdate,1,sysdate,1,1)};
    Here "ASSIGNMENTS_PKG" is a package name and INSERT_ROW is the procedure.
    When the SQLJ program is run, I get an error stating:
    "PLS-00201: identifier 'A' must be declared"
    I read the error message, but I am not able to understand where I need to give the GRANT permission to.

    If you're using Oracle Provider for OLE DB (OraOLEDB) to execute this stored procedure, you need to set PLSQLRSet attribute. This attribute can be set in registry, connection string, or command object. Please refer to User Documentation for more information.

  • Error while trying to access a SSWA PLSQL function

    Hi,
    I am trying to access a report as a web page by defining the function as follows :
    Type : SSWA PLSQL FUNCTION
    HTML Call : OracleOASIS.RunReport
    Parameters : report=EMPDET
    This function is attached to the menu and when I try to access the page I get this error.
    "Error: The requested URL was not found, or cannot be served at this time.
    Incorrect usage."
    The URL that shows in the page is as follows(<server:port> I removed the server name and port) :
    http://<server:port>/dev60cgi/rwcgi60?GDEV_APPS+DESFORMAT=HTML+SERVER=GDEV_APPS+report=EMPDET+p_session_id=A9C71A70B9B1D9BD2DCC0FC3AF9BC324+p_user_id=1133+p_responsibility_id=50230+p_application_id=800+p_security_group_id=0+p_language_code=US+NLS_LANG=AMERICAN_AMERICA+NLS_DATE_FORMAT=DD-MON-RRRR+NLS_NUMERIC_CHARACTERS=.%2C+NLS_DATE_LANGUAGE=AMERICAN+NLS_SORT=BINARY+paramform=NO
    Surprisingly other functions which are defined in this manner work fine. Do I need to register my report anywhere or are there any other settings I need to do for the report to show up.
    Can someone let me know.
    Thanks

    Hi ;
    pelase check below which could be similar error like yours
    Troubleshooting of Runtime Errors of Customer Intelligence Reports [ID 284829.1]
    Regard
    Helios

  • Error while consuming PLSQL Webservice through BPEL

    HI ,
    I have created a simple PLSQL Web service called "HelloWorld" and it got successfully deployed .
    When I tried to test this webservice through BPEL Process Manager , its showing me error everytime that ( Could not create object of class 'dimple.HelloWorldWebServiceUser'; nested exception is: java.lang.ClassNotFoundException: dimple.HelloWorldWebServiceUser</summary> ) .
    Please anyone help me out with this problem .
    Thanks
    Prashant Dwivedi

    HI ,
    I have created a simple PLSQL Web service called "HelloWorld" and it got successfully deployed .
    When I tried to test this webservice through BPEL Process Manager , its showing me error everytime that ( Could not create object of class 'dimple.HelloWorldWebServiceUser'; nested exception is: java.lang.ClassNotFoundException: dimple.HelloWorldWebServiceUser</summary> ) .
    Please anyone help me out with this problem .
    Thanks
    Prashant Dwivedi

  • The simplest way for plsql procedure to return multiple rows

    Hi,
    What is the simplest way for plsql procedure to return multiple rows (records). There are many combination of ways to do it but I am looking for a solution that is appropriate for plsql beginners. Many solutions use cursors, cursor variables, collections and more that kind of things that are complex on the face of it. Is it somehow possible to achieve the same with less effort?
    Sample query would be: SELECT * FROM EMPLOYEES;
    I want to use returned rows in APEX to compose APEX SQL(in that context plsql) report.
    It is enough to use just SELECT * FROM EMPLOYEES query in APEX but I want to use plsql procedure for that.
    Thank you!

    Hi,
    It depends :-).
    With +...that is appropriate for plsql beginners...+ in mind... it still depends!
    The list of techniques (ref cursors, cursor variables, collections, arrays, using explict SQL) you have referenced in your post can be made to work. but...
    +Is it somehow possible to achieve the same with less effort?+ Less effort : That needs to be defined (measured). Especially in the context of pl/sql beginners (who is a beginner?) .
    What is the level of "programming experience" ?
    What is the level of understanding of "Relational Result set" as processible in Oracle?
    If you are looking for
    Process_the_set_of rows_in APEX () kind of capabilitywhich "abstracts/hides" relation database from developers when working on relation database, it may not be the best approach (at least strategically). Because I believe it already is abstracted enough.
    I find REF CUROSOR most effective for such use, when the "begginer" has basic understanding of processing SQL result set .
    So in a nut shell, the techniques (that you already are familiar with) are the tools available. I am not aware of any alternative tools (in pure Oracle) that will simplify / hide basics from develpers.
    vr,
    Sudhakar B.

  • Generate Query in PLSQL to return Well Formed XML with Multiple records

    Hi there
    This is very urgent. I am trying to create a PLSQL query that should retrieve all records from oracle database table "tbl_Emp" in a well formed xml format. The format is given below
    *<Employees xmlns="http://App.Schemas.Employees" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">*
    *<Employee>*
    *<First_Name></First_Name>*
    *<Last_Name></Last_Name>*
    *</Employee>*
    *<Employee>*
    *<First_Name></First_Name>*
    *<Last_Name></Last_Name>*
    *</Employee>*
    *</Employees>*
    To retrieve data in above format, I have been trying to create a query for long time as below
    SELECT XMLElement("Employees",
    XMLAttributes('http://App.Schemas.Employees' AS "xmlns",
    *'http://www.w3.org/2001/XMLSchema-instance' AS "xmlns:xsi"),*
    XMLElement("Employee", XMLForest(First_Name, Last_Name)))
    AS "RESULT"
    FROM tbl_Emp;
    But it does not give me the required output. It creates <Employees> tag with each individual record which I don't need. I need <Employees> tag to be the root tag and <Employee> tag to repeat and wrap each individual record. Please help me in this as this is very urgent. Thanks.

    Hi,
    Please remember that nothing is "urgent" here, and repeating that it is will likely produce the opposite effect.
    If you need a quick answer, provide all necessary details in the first place :
    - db version
    - test case with sample data and DDL
    That being said, this one's easy, you have to aggregate using XMLAgg :
    SELECT XMLElement("Employees"
           , XMLAttributes(
               'http://App.Schemas.Employees' AS "xmlns"
             , 'http://www.w3.org/2001/XMLSchema-instance' AS "xmlns:xsi"
           , XMLAgg(
               XMLElement("Employee"
               , XMLForest(
                   e.first_name as "First_Name"
                 , e.last_name  as "Last_Name"
           ) AS "RESULT"
    FROM hr.employees e
    ;

  • Business Event not triggering the PLSQL procedure.. What to do?

    We need to call a plsql procedure when the GL Approval workflow has ended with approval. I thought i could do this by customizing the relevant business event.
    We are on EBS 12.1.3 with RDBMS : 11.2.0.3.0.
    I saw that the business event oracle.apps.gl.Journals.journal.approve was disabled currently. I enabled it and created a subscription for it. Subscription was a PLSQL procedure. Currently, for test purpose only thing it is doing is to insert a row into a table.
    Business Event Subscription settings:
    System: ORDEBS.SYSTEM.COM
    Triggering Event
    Source Type:Local
    Event Filter: oracle.apps.gl.Journals.journal.approve
    Execution Condition
    Phase: 100
    Status: Enabled
    Rule Data: Message
    Action Type:Custom
    On Error: Stop and Rollback
    Action
    PL/SQL Rule Function: XX_GL_APPROVE_BE_PKG.Get_Attributes
    Priority: Normal
    Documentation (Not sure what value to be given for these. I went with the below values.)
    Owner: Company Name
    Owner Tag: Custom Schema
    Using the below query i can see that the business event is getting called when the approval happens (One row added each time approval happened). But I cant see any rows in the table where it should insert a row. What could be going wrong? How can i verify that the procedure has been called?
    select * from WF_DEFERRED where corrid ='APPS:oracle.apps.gl.Journals.journal.approve'
    Procedure:
    CREATE OR REPLACE PACKAGE BODY APPS.XX_GL_APPROVE_BE_PKG
    AS
    PROCEDURE Get_Attributes
    IS
    BEGIN
    INSERT INTO xx.xx_test_table VALUES ('From BE');
    COMMIT;
    END Get_Attributes;
    END XX_GL_APPROVE_BE_PKG;

    Thanks Alejandro. Now this is working.
    Changes i made:
    1. Added the WFERROR workflow as a subscription to this event. So i could see that the function i am calling from the event did not have proper signature.
    2. Changed the function signature to have standard parameters like:
    CREATE OR REPLACE PACKAGE BODY XX_GL_APPROVE_BE_PKG
    AS
    function subscription(p_subscription_guid in raw,
    p_event in out nocopy wf_event_t) return varchar2 is
    l_result varchar2(20);
    begin
    insert into xxvtv.xxvtv_test_table values ('From BE');
    commit;
    exception
    when others then
    wf_core.context('XX_GL_APPROVE_BE_PKG','function subscription', p_event.getEventName(), p_event.getEventKey());
    wf_event.setErrorInfo(p_event, 'ERROR');
    return 'ERROR';
    end subscription;
    END XX_GL_APPROVE_BE_PKG;
    3. Changed the owner name and owner tag both to the custom schema name (XX)

  • How Can I Run A SQLJ Normal Project In SAP NWDS

    I have a question about SQLJ in SAP NWDS.
    1.I created a java dictionary project,and then create the table , then depoly it.it's ok.
    2.I created a java normal project including the above java dictionary project.
    3.I used the SQLJ tech in the java normal project,exporting the opensqllib.jar,sqljapi.jar,sqljc.jar,sqljimpl.jar.
    4.I coded the normal project,and export the project .jar,everything is ok.
    <b>5.But when i runed the project in NWDS,the error appeared:java.lang.NoClassDefFoundError: com/sap/sql/log/OpenSQLException
         at com.ezkj.deom.sqlj.MainApp.main(MainApp.java:21)
    Exception in thread "main"</b>
    How Can I Run A SQLJ Normal Project In SAP NWDS?
    PLS Help me and don't let me alone!

    Tony,
    Why not try to import your SQLJ project in SAP NWDS. Add all the jars mentioned to the project path both for compile time as well as runtime. Now try running he project. Once you are able to bypass java.lang.NoClassDefFoundError, you will get other errors related to SQL statements. These Oracle SQL statements needs to be converted to OpenSQL format.
    Chill out!!!
    Sukanta Rudra
    Note: If helpful, plz donate some points.

  • Difference between empty plsql record and null plsql record

    Hi there,
    I am kinda getting confused with empty plsql record and null plsql record.
    How do I assign plsql record to be empty and to be null?
    create type emp_obj as object (enum number, ename varchar2);
    CREATE OR REPLACE TYPE emp_type AS TABLE OF emp_obj;
    Thanks

    First of all, do not use term PL/SQL record in this context. Record type in PL/SQL is completely different from object type. Secondly, there are 2 states of a nested table:
    1. Unintialized:
    SQL> create or replace
      2    type emp_obj_type as object(enum number, ename varchar2(10));
      3  /
    Type created.
    SQL> create or replace
      2    type emp_tbl_type as table of emp_obj_type
      3  /
    Type created.
    SQL> declare
      2      v_emp_tbl emp_tbl_type;
      3  begin
      4      v_emp_tbl.extend;
      5  end;
      6  /
    declare
    ERROR at line 1:
    ORA-06531: Reference to uninitialized collection
    ORA-06512: at line 4
    SQL> 2 Empty:
    SQL> set serveroutput on
    SQL> declare
      2      v_emp_tbl emp_tbl_type := emp_tbl_type();
      3  begin
      4      dbms_output.put_line('Nested table v_emp_tbl has ' || v_emp_tbl.count || ' element(s).');
      5  end;
      6  /
    Nested table v_emp_tbl has 0 element(s).
    PL/SQL procedure successfully completed.
    SQL> NULL aplies to nested table element, not to nested table itself:
    SQL> declare
      2      v_emp_tbl emp_tbl_type := emp_tbl_type();
      3  begin
      4      v_emp_tbl.extend;
      5      if v_emp_tbl(1) is null
      6        then
      7          dbms_output.put_line('Nested table v_emp_tbl first element is NULL.');
      8      end if;
      9  end;
    10  /
    Nested table v_emp_tbl first element is NULL.
    PL/SQL procedure successfully completed.
    SQL> SY.

Maybe you are looking for