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:85Could 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,
RajiHi,
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’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 schweigerahem...
bump -
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.
ThanksHi ;
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 DwivediHI ,
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;
ThanksFirst 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
-
How to get the Hyper-V version/hostname from a linux guest?
Hi, I am running a custom Linux VM on Windows Server 2008 R2 Hyper-V. I need to get the version/hostname of Hyper-V from the running custom Linux guest. How can I do that? I am having Integration Service 3.4 installed. Is there any option I can confi
-
Have MacBook Pro, Airport Extreme router, Mtn Lion 10.8.1 and want to print wirelessly with HP 3054 610a which was installed 2 days ago via USB. Prefer to set up the printer on the wifi network, but how do I enter ssid and passphrase. On the printer
-
I used MT_PerformRate for both sender side and receiver side in message mapping When I goto interface mapping and click on the mapping program it gives following error. The source or target structure has been changed or could not be found in the Inte
-
Adding XNAPR field in MIGO_GR selecting different output type
Hi, We are setting the NDR parameter in table USR05 to set XNAPR field to 'X' in MIGO_GR transaction in our custom program through BAPI_GOODSMVT_CREATE. It is updating the field successfully in the transaction. But it is setting the output type as ZA
-
ALERT Category Lont Text (email) fomatting
I have Alert Management configured to send an email alert correctly. I need some formatting for the email and therefore I choose to edit the alert category long text using SO10 ( remembering that the Text-id is ALRT ). while editing the Alert's Long