Je souhaitais utiliser une fonction personnalisée,
à l'intérieur d'une requête SQL, afin de passer une mise à jour,
directement depuis la console HSQL.
Code : Tout sélectionner
insert into "prenoms_PRE" ("prenom")
SELECT DISTINCT MajSansAccentNiCedille$("Prenom") FROM "prenoms_PREbis" ORDER BY "Prenom" ASC
En essayant par code, j'ai l'impression de retourner sur la même difficulté !
'ATTENTION A LA CASSE SENSIBLE CONCERNANT LE NOM DE COLONNES.
Code : Tout sélectionner
'Auteur l: Greengiant224
Sub Insert2Table
REM INSERT RECORDS INTO DATABASE TABLE
Dim Context
Dim DB
Dim Conn
Dim Stmt
Dim Result
Dim strSQL As String
Context=CreateUnoService("com.sun.star.sdb.DatabaseContext") '< get the database context
DB=Context.getByName("travail") '<- change database name
Conn=DB.getConnection("","") '<- username & password pair - HSQL default blank
Stmt=Conn.createStatement()
strSQL= _
"insert into ""prenoms_PRE"" (""prenom"") " & _
"SELECT DISTINCT ""prenom"" FROM ""prenoms_PREbis"" ORDER BY ""prenom"" ASC;"
'LA REQUETE CI-DESSOUS NE FONCTIONNE PAS !!!
'# "insert into ""prenoms_PRE"" (""prenom"") " & _
'# "SELECT DISTINCT MajSansAccentNiCedille$(""prenom"") FROM ""prenoms_PREbis"" ORDER BY ""prenom"" ASC;"
Stmt.executeUpdate(strSQL) '<- update the inserted data
Conn.close() '<- close the db connection
End Sub
L'usage des fonctions personnalisées avec le HSQL est il possible.
Je viens de trouver un post à ce sujet :
https://forum.openoffice.org/en/forum/v ... 13&t=72206
Bref, je cherche maintenant à écrire une fonction personnalisée dans la console,
mais tout seul, je n'ai aucune idée pour savoir le faire, et savoir me déboguer.
Code : Tout sélectionner
'FONCTION A TRADUIRE DANS LA CONSOLE SQL :
Public Function MajSansAccentNiCedille$(ByVal Chaine$)
'Auteur : Thierry POURTIER
Const VAccent = "àáâãäåéêëèìíîïðòóôõöùúûüç", VSsAccent = "aaaaaaeeeeiiiioooooouuuuc"
Dim Bcle&
'Dim Bcle As String
For Bcle = 1 To Len(VAccent)
Chaine = Replace(Chaine, Mid(VAccent, Bcle, 1), Mid(VSsAccent, Bcle, 1))
Next Bcle
MajSansAccentNiCedille$ = Chaine
End Function
'je ne suis pas sûr de savoir créer une fonction personnalisée, comme sur ce modèle,
'qui me permettrait d'implémenter la fonction personnalisée à mon libreoffice :
'aller dans le menu Tools\SQL
'Dans la console d'exécution SQL, injecter le code suivant :
'puis exécuter
'refermer la console
'A CREER :
CREATE FUNCTION MajSansAccentNiCedille$ (INPUTSTRING VARCHAR(32000))
RETURNS VARCHAR(32000)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
-- Be sure to return a NULL value if input is NULL
RETURNS NULL ON NULL INPUT
BEGIN ATOMIC
RETURN MajSansAccentNiCedille$;
END
'MODELE QUI FONCTIONNE, A SUIVRE :
CREATE FUNCTION PROPER (INPUTSTRING VARCHAR(32000))
RETURNS VARCHAR(32000)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
-- Be sure to return a NULL value if input is NULL
RETURNS NULL ON NULL INPUT
BEGIN ATOMIC
DECLARE PROPERCASE VARCHAR(32000);
-- Bring back all characters as lower CASE
SET PROPERCASE = LOWER(INPUTSTRING);
-- When PROPERCASE is blank, no need to proceed so end it here
IF PROPERCASE = '' THEN
RETURN PROPERCASE;
END IF;
-- Use UNNEST, and REGEXP_SUBSTRING_ARRAY to bring back unique array of
-- NOT [^\p{javaLowerCase}] followed by [\p{javaLowerCase}]
FOR
SELECT DISTINCT REG_ARRAY as REG_CHAR FROM UNNEST(REGEXP_SUBSTRING_ARRAY(PROPERCASE,'[^\p{javaLowerCase}][\p{javaLowerCase}]')) AS T(REG_ARRAY)
DO
SET PROPERCASE = REPLACE(PROPERCASE,REG_CHAR,UPPER(REG_CHAR));
END FOR;
-- Make sure first character is UPPER CASE
SET PROPERCASE = UPPER(SUBSTR(PROPERCASE,1,1)) || SUBSTR(PROPERCASE,2);
RETURN PROPERCASE;
END
d'une erreur de syntaxe de mon instruction HSQL.
Un conseil ?
Merci et à bientôt.