Code: Select all
DECLARE
l_data VARCHAR2(4000);
l_qr_blob BLOB;
l_ean8 VARCHAR2(8);
BEGIN
FOR r IN (
SELECT empno,
NVL(ename, '') ename,
NVL(job, '') job
FROM emp
)
LOOP
IF :P27_BARCODE_TYPE = 'QRCODE' THEN
-- QR Code: can use full data
l_data := TO_CHAR(r.empno) || ',' || r.ename || ',' || r.job;
l_qr_blob := apex_barcode.get_qrcode_png(
p_value => l_data,
p_scale => :P27_BARCODE_SCALE,
p_quiet => 5,
p_eclevel => 'H'
);
ELSIF :P27_BARCODE_TYPE = 'CODE128' THEN
-- CODE128: reduced data, limit length
l_data := TO_CHAR(r.empno) || ',' || r.ename || ',' || r.job;
IF LENGTH(l_data) > 50 THEN
l_data := SUBSTR(l_data, 1, 50);
END IF;
l_qr_blob := apex_barcode.get_code128_png(
p_value => l_data,
p_scale => :P27_BARCODE_SCALE
);
ELSIF :P27_BARCODE_TYPE = 'EAN8' THEN
-- EAN8: only 8-digit numeric using empno
l_ean8 := LPAD(REGEXP_REPLACE(TO_CHAR(r.empno), '[^0-9]', ''), 8, '0');
l_qr_blob := apex_barcode.get_ean8_png(
p_value => l_ean8,
p_scale => :P27_BARCODE_SCALE
);
ELSE
RAISE_APPLICATION_ERROR(-20001, 'Invalid barcode type: ' || :P27_BARCODE_TYPE);
END IF;
UPDATE emp
SET qr_code_blob = l_qr_blob
WHERE empno = r.empno;
END LOOP;
END;