Thursday, April 10, 2014

Oracle BULK COLLECT INTO using EXECUTE IMMEDIATE

SET SERVEROUTPUT ON;

--Create a sample table
CREATE TABLE EMP(EMP_ID NUMBER, EMP_NAME VARCHAR2(20), AGE NUMBER(3))
/

--Insert a few records
INSERT INTO EMP (EMP_ID, EMP_NAME, AGE) VALUES (100, 'Regina Hall', 25)
/
INSERT INTO EMP (EMP_ID, EMP_NAME, AGE) VALUES (101, 'Morris Chestnut', 35)
/
INSERT INTO EMP (EMP_ID, EMP_NAME, AGE) VALUES (102, 'Terrence Howard', 37)
/
INSERT INTO EMP (EMP_ID, EMP_NAME, AGE) VALUES (103, 'Sanaa Lathan', 25)
/

--Create User defined Objects to use in BULK COLLECT
CREATE TYPE EMP_OBJ IS OBJECT (EMP_ID NUMBER, EMP_NAME VARCHAR2(20), AGE NUMBER(3))
/
CREATE TYPE EMP_TAB IS TABLE OF EMP_OBJ
/

--Anonymous block demonstrate the use of EXECUTE IMMEDIATE and BULK COLLECT INTO
DECLARE
    c_emp EMP_TAB;
    age_v NUMBER(3) :=25;
    query VARCHAR2(4000) := 'SELECT EMP_OBJ(EMP_ID, EMP_NAME, AGE) FROM EMP WHERE AGE=';
BEGIN
    query := query||age_v;
    EXECUTE IMMEDIATE query BULK COLLECT INTO c_emp;
    DBMS_OUTPUT.PUT_LINE('The number of employees in the Collection->'||c_emp.COUNT);
    FOR i IN c_emp.FIRST..c_emp.LAST
    LOOP
        DBMS_OUTPUT.PUT_LINE(c_emp(i).emp_id||','||c_emp(i).emp_name||','||c_emp(i).age);
    END LOOP;
END;
/

Here is the output:
The number of employees in the Collection->2
100,Regina Hall,25
103,Sanaa Lathan,25

PL/SQL procedure successfully completed.

Thursday, July 21, 2011

How to use JAXB with Spring - Marshalling & Unmarshalling  

Using JAXB with Spring - Marshalling / Unmarshalling XML:

Using JAXB with Spring we can easily Marshall / Unmarshall the XML. Let us see how with an simple example.

Before starting the tutorial here are the definitions for a few technical words:
Spring's Object/XML (In short O/X) Mapping - Is the act of converting an XML document to and from an object.
Marshaller - Responsible for serializing an object (graph) to XML.
Unmarshaller - Deserializes the XML to an object graph.

Getting the JAXB Eclipse plug-in:
1. Download JAXB Eclipse Plug-In (jaxbbuilder.2.0.1581.zip) from
JAXB Eclipse Plug-in

2. Unzip the plug-in and copy the com.viewstreet.java.eclipse.jaxbplugin_0.1.0 folder into your eclipse plug-in folder (../eclipse/plugins). Restart eclipse if already open.

3. You also need to get the following jar files and set in your Eclipse classpath
jaxb-xjc-2.2.jar
jaxb-impl-2.2.jar
jaxb-api-2.2.jar

4. Create new project (Name: xmlBindingProj). Choose “Java XML Binding Project” in the new project creation wizard.



5. Create a XML Schema (.xsd) file customer.xsd: Example


6. Right click on the customer.xsd file on the project explorer and choose “Generate-> JAXB Classes”

7. Give the package name in the following dialog box as "com.mycomp.jaxbexample.order"


You can see the following classes created in the package with JAXB annotations.
ItemDetail.java
ObjectFactory.java
Person.java
Shiporder.java

8. Create the applicationContext.xml file under src directory as given below:


9. Create the following two java files and execute the ShipOrderClient.java
ShipOrderClient.java


JaxbConverter.java

Saturday, July 16, 2011

Multiple columns in Oracle IN clause 

How to use more than one column in Oracle IN clause:

CREATE TABLE t1 (id VARCHAR2(10), version NUMBER(2,1), name VARCHAR2(20));

INSERT INTO t1 VALUES ('1001', 1.1 ,'FIRST ELEMENT');
INSERT INTO t1 VALUES ('1001', 1.2 ,'FIRST ELEMENT');
INSERT INTO t1 VALUES ('1001', 1.3 ,'FIRST ELEMENT');
INSERT INTO t1 VALUES ('1001', 1.4 ,'FIRST ELEMENT');

INSERT INTO t1 VALUES ('1002', 1.1 ,'SECOND ELEMENT');
INSERT INTO t1 VALUES ('1002', 1.2 ,'SECOND ELEMENT');
INSERT INTO t1 VALUES ('1002', 1.3 ,'SECOND ELEMENT');
INSERT INTO t1 VALUES ('1002', 1.4 ,'SECOND ELEMENT');
INSERT INTO t1 VALUES ('1002', 1.5 ,'SECOND ELEMENT');
INSERT INTO t1 VALUES ('1002', 1.6 ,'SECOND ELEMENT');
INSERT INTO t1 VALUES ('1002', 1.7 ,'SECOND ELEMENT');

SELECT id, version, name FROM t1 WHERE (id, version) IN ( (1001,1.1), (1002,1.6) );