Last active
July 15, 2021 12:54
-
-
Save NielsLiisberg/9ca47191bae9f301c0f00310201aaab6 to your computer and use it in GitHub Desktop.
SQL append to IFS file
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
---------------------------------------------------------------------------------------------- | |
-- Easy way to append text to a stream file in the IFS, by using C runtime as inline code | |
-- | |
-- Simply paste the raw version of this gist into ACS SQL and select "run all" | |
-- | |
-- Note: I am using library QUSRSYS. I suggest you put it into your own tool library | |
-- | |
-- You need library QSYSINC installed: | |
-- https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_74/apiref/conQSYSINC.htm | |
-- | |
-- I doubt it is a good idea to build huge applications this way, however it | |
-- is a cool example how far you can go with SQL. Have fun. | |
-- (C) Niels Liisberg 2020 | |
---------------------------------------------------------------------------------------------- | |
call qcmdexc ('ADDLIBLE LIB(QSYSINC)'); | |
call qcmdexc ('CRTSRCPF FILE(QTEMP/C) MBR(C) CCSID(37)'); | |
delete from qtemp.c; | |
insert into qtemp.c (srcdta) values | |
('{'), | |
('#include <sys/types.h>'), | |
('#include <sys/stat.h>'), | |
('#include <fcntl.h>'), | |
('int f,l,o;'), | |
('mode_t mode = S_IRUSR | S_IWUSR | S_IXUSR;'), | |
('o = O_WRONLY | O_CREAT | O_APPEND | O_CCSID ;'), | |
('IFS_APPEND.NAME.DAT[IFS_APPEND.NAME.LEN] =0;'), | |
('f = open(IFS_APPEND.NAME.DAT, o, mode, 1208);'), | |
('l = write(f, IFS_APPEND.BUF.DAT,IFS_APPEND.BUF.LEN);'), | |
('close (f);'), | |
('}') | |
; | |
create or replace procedure qusrsys.ifs_append(name varchar(256), buf varchar(32700) ccsid 1208) | |
external action | |
modifies sql data | |
set option output=*print, commit=*none, dbgview = *source | |
begin | |
if buf is not null then | |
include qtemp/c(c); | |
end if; | |
end; | |
-- Test it like this - Yes it supports national characters | |
call qusrsys.ifs_append('/tmp/test2.txt' , 'Hello ÆØÅ こんにちは'); |
Hi,
create procedure error:
ID MES SEV RECORD TESTO
SQL0007 20 95 Posizione 1 Carattere '{' (HEX X'44') non valido
nell'istruzione SQL.
SQL0007 20 98 Posizione 20 Carattere '[' (HEX X'90') non valido
nell'istruzione SQL.
SQL0007 20 98 Posizione 40 Carattere ']' (HEX X'51') non valido
nell'istruzione SQL.
SQL0007 20 102 Posizione 1 Carattere '}' (HEX X'54') non valido
nell'istruzione SQL.
Hello @emidioporziella, I think you need to press the "raw" button in the gist before you copy the source into your ACS. If not maybe you have to set the ccsid on the source file in line 2. So try this updated version.
Hi Niels,
I've solved using ACS.
Thank's a lot.
Great !! My pleasure :)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks! :-)