Publié le 27/08/2009 à 15:13 par khanfouf
--
Publié le 27/08/2009 à 15:12 par khanfouf
Publié le 25/08/2009 à 17:37 par khanfouf
CREATE OR REPLACE FUNCTION coltorow( p_slct IN VARCHAR2, p_dlmtr IN VARCHAR2 DEFAULT ',' ) RETURN VARCHAR2
AUTHID CURRENT_USER
/* 1) Column should be character type.
2) If it is non-character type, column has to be converted into character type.
3) If the returned rows should in a specified order, put that ORDER BY CLASS in the SELECT statement argument.
4) If the SQL statement happened to return duplicate values, and if you don't want that to happen, put DISTINCT in the SELECT
statement argument. */
AS TYPE c_refcur IS REF CURSOR;
lc_str VARCHAR2(4000);
lc_colval VARCHAR2(4000);
c_dummy c_refcur;
l number;
BEGIN
OPEN c_dummy FOR p_slct;
LOOP
FETCH c_dummy INTO lc_colval;
EXIT WHEN c_dummy%NOTFOUND;
lc_str := lc_str || p_dlmtr || lc_colval;
END LOOP;
CLOSE c_dummy;
RETURN SUBSTR(lc_str,2);
END;
Utilisation
* Exemple :
select name from m_product
* resulat 1:
name
====
AAAA
BBBB
CCCC
* Avec la fonction coltorow :
select coltorow('select name from m_product') as name from dual
* resultat 2 :
name
================
AAAA,BBBB,CCCC
* Avec un autre délimiteur par exemple ';' :
select rowtocol('select name from m_product', ';') as name from dual
* resultat 3 :
name
================
AAAA;BBBB;CCCC
Publié le 24/08/2009 à 16:20 par khanfouf
Voici la procédure qui donne la liste des colonne d'une requête construite dynamiquement:
create or replace PROCEDURE list_col_request
(
m_sql NVARCHAR2
)
AS
BEGIN
DECLARE
curid NUMBER;
desctab dbms_sql.DESC_TAB;
colcnt NUMBER;
sql_stmt NVARCHAR2(2000) := m_sql;
BEGIN
curid := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(curid, sql_stmt, DBMS_SQL.NATIVE);
DBMS_SQL.DESCRIBE_COLUMNS(curid, colcnt, desctab);
FOR i IN 1 .. colcnt
LOOP
DBMS_OUTPUT.PUT(desctab(i).col_name);
DBMS_OUTPUT.PUT_LINE(desctab(i).col_schema_name);
END LOOP;
DBMS_SQL.CLOSE_CURSOR(curid);
END;
END;
Publié le 31/01/2008 à 12:00 par khanfouf
Le passeport électronique en Algérie.
Publié le 25/01/2008 à 12:00 par khanfouf
Publié le 29/07/2007 à 12:00 par khanfouf
cette procedure plsql a comme parametre l'ID pour preciser quel champ on doit le mettre a jour dans la table et le contenu d'un CLOB qu'on va l'ajouter au champ request dans l'exemple ci-dessous:
si on applle cette procedure a partir d'un code java avec un ID et un String on aura le contenu du String a la fin du champ request.
par contre si on fait un update sur ce champ oracle a une limitation de la taille du champ et il tronque a 2000car.
CREATE OR REPLACE PROCEDURE ajouter
( p_Element_ID IN NUMBER, p_Request IN CLOB)
AS
dest_lob CLOB;
BEGIN
SELECT Request
INTO dest_lob
FROM MA_Table
WHERE MA_Element_ID=p_Element_ID FOR UPDATE;
-- Ajout de src_lob a la fin de dest_lob --
DBMS_LOB.APPEND(dest_lob, p_Request);
COMMIT;
END;
Publié le 29/07/2007 à 12:00 par khanfouf
code java:
String strUrl = "jdbc:microsoft:sqlserver://InvertedSoftware.com:1433;DatabaseName=InvertedSoftware";
String strUserId = "USER";
tring strPassword = "PASSWORD";
String className = " com.microsoft.jdbc.sqlserver.SQLServerDriver ";
try {
Class.forName(className);
} catch(java.lang.ClassNotFoundException e) {
System.err.println(e.getMessage());
}
try {
Connection con = DriverManager.getConnection(strUrll, strUserId, strPassWord);
Statement stmt = con.createStatement();
ResultSet rs1 = stmt.executeQuery("SELECT * FROM tbl_category");
ResultSet rs2 = stmt.executeQuery("SELECT * FROM tbl_product");
CachedRowSet categoryCachedRowSet = new CachedRowSetImpl();
categoryCachedRowSet.populate(rs1);
CachedRowSet productCachedRowSet = new CachedRowSetImpl();
productCachedRowSet.populate(rs2);
con.close();
JoinRowSet jrs = new JoinRowSetImpl();
jrs.addRowSet(categoryCachedRowSet, "category_id");
jrs.addRowSet(productCachedRowSet, "category_id");
jrs.close();
} catch(SQLException sqle) {
}
Explication:
rs1 c'est le result set qui contient les données de la table category
rs2 c'est le result set qui contient les données de la table product
categoryCachedRowSet, productCachedRowSet se sont deux result set qui travaillent directement en memoire.
JoinRowSet c'est le result set qui fait la jointure des deux result set en memoire.
Publié le 10/06/2007 à 12:00 par khanfouf
Comment charger une fonction java dans oracle?
il faut juste ouvrir la commande du DOS
et mettre la commande suivante:
loadjava -u username/password@dbname -r classname.java
Exemple:
loadjava -u root/root@orcl -r C:/app.java