1. Create File Browse Item
2. Goto Item >Advanced> Custom Attributes> Type Multiple (For selecting multiple data)
3. Create another text field to get File Name
4. Create Dynamic Action on File Browse Item
"Onchange" event JavaScript.
var x = document.getElementById("P30_DOCUMENTS");
vlength=x.files.length;
var txt = "";
$x("P30_FILE_NAME").value="";
if ('files' in x) {
for (var i = 0; i <vlength; i++) {
if (x.files.length == 0) {
txt = "Select one or more files.";
$x("P30_FILE_NAME").value="";
}
else{
txt += "<br><strong>" + (i+1) + ". file</strong><br>";
console.log("txt ="+txt );
var file = x.files[i];
if ('name' in file) {
txt += "name: " + file.name + "<br>";
$x("P30_FILE_NAME").value+=file.name;
}
if ('size' in file) {
txt += "size: " + file.size + " bytes <br>";
}
if(i!=vlength-1)
{
$x("P30_FILE_NAME").value+=",";
}
}
}
}
5. Create the Page Process to get the file from APEX_APPLICATION_FILES and Store it in a Temporary Table.
Code:
DECLARE
l_selected apex_application_global.vc_arr2;
lv_filename VARCHAR2 (100);
BEGIN
l_selected := apex_util.string_to_table (:p37_filename, ':');
FOR i IN 1 .. l_selected.COUNT
LOOP
lv_filename := l_selected (i);
BEGIN
INSERT INTO mul_file_attach
(file_id, filename, mime_type, file_content,file_size)
SELECT ID, lv_filename, mime_type, blob_content,DOC_SIZE
FROM apex_application_files
WHERE filename = lv_filename AND created_by = :app_user;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
raise_application_error (-20585, 'Error in Insertion' || SQLERRM);
END;
DELETE FROM apex_application_files
WHERE filename = lv_filename AND created_by = :app_user;
COMMIT;
END LOOP;
END;
Muhammad Abdul Qaium is a Database Engineer/Oracle Apex Developer/BI Developer (in Connecticut, USA) who is an Oracle Certified Cloud Architect Professional, OCI Autonomous DB specialist as well as Oracle Business Intelligence Foundation Suite 11g Certified Implementation Specialist with extensive expertise in Database design , PL/SQL, Oracle Apex, Microsoft SSIS, ETL, Power BI, Qlik Sense, BI Publisher, Jasper Report, OBIEE. Contact: qaiuminfo@gmail.com
Search This Blog
Friday, August 2, 2019
Monday, July 22, 2019
Uncommon Functions and Objects In Oracle SQL and PL/SQL
1. TO_CHAR(Date,'fmDay Month fmDD, YYYY'): 'fm' prefix can be remove Embedded spaces from value.
2. NVL2( value , value_if_not_null, value_if_null )
3. In NVL and NVL2
NVL2(inv_date,'Pending','Incomplete')
=> True (value_if_not_null and value_if_null are same type)
NVL2(inv_amt,inv_date,'Not Available') False
NVL2(inv_date,sysdate-inv_date,sysdate)
=> True (value_if_not_null and value_if_null are same type)
NVL2(inv_amt,inv_amt*.25,'Not Available') False
NVL(ADD_MONTHS(END_DATE,1),SYSDATE)
=> True (value and value_if_null are same type )
TO_DATE(NVL(SYSDATE-END_DATE,SYSDATE)) False
NVL(MONTHS_BETWEEN(start_date,end_date),'Ongoing') False
NVL(TO_CHAR(MONTHS_BETWEEN(start_date,end_date)),'Ongoing')
=> True (value_if_null is convert to value_if_null type)
NVL(TO_CHAR(cust_credit_limit*.15),'Not Available')
=> True (value_if_null is convert to value_if_null type)
TO_CHAR(NVL(cust_credit_limit*.15,'Not Available')) False
NVL(cust_credit_limit*.15,'Not Available') False
NVL(cust_credit_limit,'Not Available') False
4. NULLIF
If both value is same then return null or retrun first value.
SELECT NULLIF(1, 1) FROM emp; Return : null
SELECT NULLIF(1, 2) FROM emp; Return : 1
SELECT NULLIF(null, 2) FROM emp; Return : null
5. COALESCE
COALESCE (value1, value2, value3) is equal to
CASE
WHEN value1 is NOT NULL THEN value1
WHEN value2 is NOT NULL THEN value2
Else value3
END
1. TO_CHAR(Date,'fmDay Month fmDD, YYYY'): 'fm' prefix can be remove Embedded spaces from value.
2. NVL2( value , value_if_not_null, value_if_null )
3. In NVL and NVL2
NVL2(inv_date,'Pending','Incomplete') True (value_if_not_null and value_if_null are same type)
NVL2(inv_amt,inv_date,'Not Available') False
NVL2(inv_date,sysdate-inv_date,sysdate) True (value_if_not_null and value_if_null are same type)
NVL2(inv_amt,inv_amt*.25,'Not Available') False
NVL(ADD_MONTHS(END_DATE,1),SYSDATE) True (value and value_if_null are same type )
TO_DATE(NVL(SYSDATE-END_DATE,SYSDATE)) False
NVL(MONTHS_BETWEEN(start_date,end_date),'Ongoing') False
NVL(TO_CHAR(MONTHS_BETWEEN(start_date,end_date)),'Ongoing') True (value_if_null is convert to value_if_null type)
NVL(TO_CHAR(cust_credit_limit*.15),'Not Available') True (value_if_null is convert to value_if_null type)
TO_CHAR(NVL(cust_credit_limit*.15,'Not Available')) False
NVL(cust_credit_limit*.15,'Not Available') False
NVL(cust_credit_limit,'Not Available') False
4. NULLIF
If both value is same then return null or retrun first value.
SELECT NULLIF(1, 1) FROM emp; Return : null
SELECT NULLIF(1, 2) FROM emp; Return : 1
SELECT NULLIF(null, 2) FROM emp; Return : null
5. COALESCE
COALESCE (value1, value2, value3) is equal to
CASE
WHEN value1 is NOT NULL THEN value1
WHEN value2 is NOT NULL THEN value2
Else value3
END
2. NVL2( value , value_if_not_null, value_if_null )
3. In NVL and NVL2
NVL2(inv_date,'Pending','Incomplete')
=> True (value_if_not_null and value_if_null are same type)
NVL2(inv_amt,inv_date,'Not Available') False
NVL2(inv_date,sysdate-inv_date,sysdate)
=> True (value_if_not_null and value_if_null are same type)
NVL2(inv_amt,inv_amt*.25,'Not Available') False
NVL(ADD_MONTHS(END_DATE,1),SYSDATE)
=> True (value and value_if_null are same type )
TO_DATE(NVL(SYSDATE-END_DATE,SYSDATE)) False
NVL(MONTHS_BETWEEN(start_date,end_date),'Ongoing') False
NVL(TO_CHAR(MONTHS_BETWEEN(start_date,end_date)),'Ongoing')
=> True (value_if_null is convert to value_if_null type)
NVL(TO_CHAR(cust_credit_limit*.15),'Not Available')
=> True (value_if_null is convert to value_if_null type)
TO_CHAR(NVL(cust_credit_limit*.15,'Not Available')) False
NVL(cust_credit_limit*.15,'Not Available') False
NVL(cust_credit_limit,'Not Available') False
4. NULLIF
If both value is same then return null or retrun first value.
SELECT NULLIF(1, 1) FROM emp; Return : null
SELECT NULLIF(1, 2) FROM emp; Return : 1
SELECT NULLIF(null, 2) FROM emp; Return : null
5. COALESCE
COALESCE (value1, value2, value3) is equal to
CASE
WHEN value1 is NOT NULL THEN value1
WHEN value2 is NOT NULL THEN value2
Else value3
END
Friday, July 19, 2019
Strong Authentication
( "USER_ID" NUMBER,
"USER_NAME" VARCHAR2(100),
"PASSWORD" VARCHAR2(4000),
"CREATED_ON" DATE,
"DEPARTMENT" VARCHAR2(200),
"AUT_SECTION" VARCHAR2(200),
"EXPIRES_ON" DATE,
"ADMIN_USER" CHAR(1),
"FACTORY_NAME" VARCHAR2(200),
"ACCESSCODE" NUMBER(20,0),
"ACTIVE" CHAR(2),
"PHOTO" BLOB,
"SCHOOL_NAME" VARCHAR2(200)
)
==================================
CREATE OR REPLACE TRIGGER "USER_T1" BEFORE INSERT OR UPDATE ON OTSL_USERS FOR EACH ROW
BEGIN
:NEW.PASSWORD:=CUSTOM_HASH(UPPER(:NEW.USER_NAME),:NEW.PASSWORD);
if inserting then
IF :NEW.USER_ID IS NULL THEN
SELECT NVL(MAX(USER_ID)+1,1) INTO :NEW.USER_ID FROM OTSL_USERS;
END if;
end if;
END;
/
ALTER TRIGGER "USER_T1" ENABLE
/
==========================================
create or replace function custom_hash (p_username in varchar2, p_password in varchar2)
return varchar2
is
l_password varchar2(4000);
l_salt varchar2(4000) := 'UYUKQULATJYQ2RJTWPTHHIU7K1O7FR';
begin
-- This function should be wrapped, as the hash algorhythm is exposed here.
-- You can change the value of l_salt or the method of which to call the
-- DBMS_OBFUSCATOIN toolkit, but you much reset all of your passwords
-- if you choose to do this.
l_password := utl_raw.cast_to_raw(dbms_obfuscation_toolkit.md5
(input_string => p_password || substr(l_salt,10,13) || p_username ||
substr(l_salt, 4,10)));
return l_password;
end;
=========================================
create or replace function custom_auth (p_username in VARCHAR2, p_password in VARCHAR2)
return BOOLEAN
is
l_password varchar2(4000);
l_stored_password varchar2(4000);
l_expires_on date;
t NUMBER;
l_count number;
begin
t:=0;
select count(*) into l_count from otsl_users where user_name = p_username;
if l_count > 0 and t=0 then
select password, expires_on into l_stored_password, l_expires_on
from otsl_users where user_name = p_username;
if l_expires_on > sysdate or l_expires_on is null then
l_password := custom_hash(p_username, p_password);
if l_password = l_stored_password then
return true;
else
return false;
end if;
else
return false;
end if;
else
return false;
end if;
end;
Sunday, July 7, 2019
Know Details About SQLERRM Function
This function retrieves the detailed SQLERRM of the last exception raised.
Know Details About SQLERRM Function
This function retrieves the detailed SQLERRM of the last exception raised.
Syntax
UTL_HTTP.get_detailed_sqlerrm
RETURN VARCHAR2;
EXAMPLE:
-----------------------
1. EXECUTE THE BELOW ANONYMOUS BLOCK
DECLARE
l_request UTL_HTTP.req;
BEGIN
l_request := UTL_HTTP.begin_request ('http://www.some_company.com');
END;
2. NOW RUN THE BELOW SQL COMMAND
select utl_http.get_detailed_sqlerrm from dual
Syntax
UTL_HTTP.get_detailed_sqlerrm
RETURN VARCHAR2;
EXAMPLE:
-----------------------
1. EXECUTE THE BELOW ANONYMOUS BLOCK
DECLARE
l_request UTL_HTTP.req;
BEGIN
l_request := UTL_HTTP.begin_request ('http://www.some_company.com');
END;
2. NOW RUN THE BELOW SQL COMMAND
select utl_http.get_detailed_sqlerrm from dual
Syntax
UTL_HTTP.get_detailed_sqlerrm
RETURN VARCHAR2;
EXAMPLE:
-----------------------
1. EXECUTE THE BELOW ANONYMOUS BLOCK
DECLARE
l_request UTL_HTTP.req;
BEGIN
l_request := UTL_HTTP.begin_request ('http://www.some_company.com');
END;
2. NOW RUN THE BELOW SQL COMMAND
select utl_http.get_detailed_sqlerrm from dual
Value Assign On Application Item From Backend in Oracle Apex
Wednesday, June 19, 2019
Export Oracle Apex Application From Database
If you want to export your apex application from database not from application, you can execute the below command
"SELECT APEX_050100.WWV_FLOW_EXPORT_API.GET_APPLICATION (your application id) d FROM DUAL"
some times your application server is not working but your DB server is ok and you need to export your application right now, then you need this function to export your application.
N.B
-------
this function work on 5.1.4 or later version
"SELECT APEX_050100.WWV_FLOW_EXPORT_API.GET_APPLICATION (your application id) d FROM DUAL"
some times your application server is not working but your DB server is ok and you need to export your application right now, then you need this function to export your application.
N.B
-------
this function work on 5.1.4 or later version
Wednesday, May 29, 2019
Install Oracle Apex 19.1 on Oracle 11g
KEEP THE PATH FROM OTHER TABLESPACE.
Step-1
CREATE TABLESPACE APEX DATAFILE 'D:\APP\JEWEL\ORADATA\ORCL\MFIMIS\APEX.DBF' SIZE 10M AUTOEXTEND ON NEXT 20M;
Step-2
@APEXINS.SQL APEX1 APEX1 TEMP /i/
Step-3
@APXCHPWD.SQL
Step-4
@APXLDIMG E:\apex_19.1
Step-5
@apex_epg_config.sql E:\apex_19.1
Step-6
EXEC DBMS_XDB.SETHTTPPORT(8888) ;
Step-7
ALTER USER ANONYMOUS ACCOUNT UNLOCK ;
ALTER USER APEX_PUBLIC_USER ACCOUNT UNLOCK;
ALTER USER APEX_PUBLIC_USER IDENTIFIED BY vinish;
KEEP THE PATH FROM OTHER TABLESPACE.
Step-1 CREATE TABLESPACE APEX DATAFILE 'D:\APP\JEWEL\ORADATA\ORCL\MFIMIS\APEX.DBF' SIZE 10M AUTOEXTEND ON NEXT 20M;
Step-2 @APEXINS.SQL APEX1 APEX1 TEMP /i/
Step-3 @APXCHPWD.SQL
Step-4 @APXLDIMG E:\apex_19.1 (This path is apex folder's immediate previous directory )
Step-5 @apex_epg_config.sql E:\apex_19.1 (This path is apex folder's immediate previous directory )
Step-6 EXEC DBMS_XDB.SETHTTPPORT(8888) ;
Step-7 ALTER USER ANONYMOUS ACCOUNT UNLOCK ;
ALTER USER APEX_PUBLIC_USER ACCOUNT UNLOCK;
ALTER USER APEX_PUBLIC_USER IDENTIFIED BY vinish;
KEEP THE PATH FROM OTHER TABLESPACE.
Step-1
CREATE TABLESPACE APEX DATAFILE 'D:\APP\JEWEL\ORADATA\ORCL\MFIMIS\APEX.DBF' SIZE 10M AUTOEXTEND ON NEXT 20M;
Step-2
@APEXINS.SQL APEX1 APEX1 TEMP /i/
Step-3
@APXCHPWD.SQL
Step-4
@APXLDIMG E:\apex_19.1
Step-5
@apex_epg_config.sql E:\apex_19.1
Step-6
EXEC DBMS_XDB.SETHTTPPORT(8888) ;
Step-7
ALTER USER ANONYMOUS ACCOUNT UNLOCK ;
ALTER USER APEX_PUBLIC_USER ACCOUNT UNLOCK;
ALTER USER APEX_PUBLIC_USER IDENTIFIED BY vinish;
Monday, May 27, 2019
Calling JS by ID
$("td[headers=myimgid]").click(function(){ // myimgid is a ID
(I use it for Image Size)
ShowLargeImage(this);
});
<title>
<span style="font-family: "courier new" , "courier" , monospace;">$("td[headers=myimgid]").click(function(){ </span> // myimgid is a ID<br />
(I use it for Image Size)<br />
<span style="font-family: "courier new" , "courier" , monospace;"> ShowLargeImage(this);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> </span><br />
<span style="font-family: "courier new" , "courier" , monospace;">});</span>
$("td[headers=myimgid]").click(function(){ // myimgid is a ID
(I use it for Image Size)
ShowLargeImage(this);
});
$("td[headers=myimgid]").click(function(){ // myimgid is a ID
(I use it for Image Size)
ShowLargeImage(this);
});
(I use it for Image Size)
ShowLargeImage(this);
});
<title>
<span style="font-family: "courier new" , "courier" , monospace;">$("td[headers=myimgid]").click(function(){ </span> // myimgid is a ID<br />
(I use it for Image Size)<br />
<span style="font-family: "courier new" , "courier" , monospace;"> ShowLargeImage(this);</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> </span><br />
<span style="font-family: "courier new" , "courier" , monospace;">});</span>
(I use it for Image Size)
ShowLargeImage(this);
});
Sunday, May 26, 2019
Multi Table Update In One Update Query
UPDATE (SELECT B.CHECK_V AS OLD, B.CHECK_V AS NEW
FROM MAS A INNER JOIN DTL B ON A.ID = B.SECTION_ID
WHERE A.DOCNUMBR = :P6_DOC AND B.ROWID = :ROWID_X) T
SET T.NEW = :CHECK_V;
<title>
<span style="font-family: "courier new" , "courier" , monospace;">UPDATE (SELECT B.CHECK_V AS OLD, B.CHECK_V AS NEW</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> FROM MAS A INNER JOIN DTL B ON A.ID = B.SECTION_ID</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> WHERE A.DOCNUMBR = :P6_DOC AND B.ROWID = :ROWID_X) T</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> SET T.NEW = :CHECK_V;</span>
UPDATE (SELECT B.CHECK_V AS OLD, B.CHECK_V AS NEW
FROM MAS A INNER JOIN DTL B ON A.ID = B.SECTION_ID
WHERE A.DOCNUMBR = :P6_DOC AND B.ROWID = :ROWID_X) T
SET T.NEW = :CHECK_V;
UPDATE (SELECT B.CHECK_V AS OLD, B.CHECK_V AS NEW
FROM MAS A INNER JOIN DTL B ON A.ID = B.SECTION_ID
WHERE A.DOCNUMBR = :P6_DOC AND B.ROWID = :ROWID_X) T
SET T.NEW = :CHECK_V;
FROM MAS A INNER JOIN DTL B ON A.ID = B.SECTION_ID
WHERE A.DOCNUMBR = :P6_DOC AND B.ROWID = :ROWID_X) T
SET T.NEW = :CHECK_V;
<title>
<span style="font-family: "courier new" , "courier" , monospace;">UPDATE (SELECT B.CHECK_V AS OLD, B.CHECK_V AS NEW</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> FROM MAS A INNER JOIN DTL B ON A.ID = B.SECTION_ID</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> WHERE A.DOCNUMBR = :P6_DOC AND B.ROWID = :ROWID_X) T</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> SET T.NEW = :CHECK_V;</span>
FROM MAS A INNER JOIN DTL B ON A.ID = B.SECTION_ID
WHERE A.DOCNUMBR = :P6_DOC AND B.ROWID = :ROWID_X) T
SET T.NEW = :CHECK_V;
Example Code Of MERGE Insert/ Update
USING (SELECT * FROM TEMPL) T
ON (M.SECTION_ID = T.SECTION_ID AND M.DOCNUMBR = :P6_DOC)
WHEN MATCHED
THEN
UPDATE SET M.M_NAME = T.M_NAME, M.MODIFYDT = SYSDATE
WHEN NOT MATCHED
THEN
INSERT (SECTION_ID, COM, DOCNUMBR)
VALUES (T.SECTION_ID, T.COM, :P6_DOC);
COMMIT;
Subscribe to:
Posts (Atom)
Create a Form Using Python for Save Data into Excel like a Database
#Download Pyhton from here https://www.python.org/downloads/ #Download Python: #Click the “Download Python 3.x.x” button (the latest versio...
-
Interactive Report Column Width Change : 1. Set a static id for the report region. Example, Region Static RGNID 2. Set a static id for the...
-
Step 1: Create the Batch File Open a text editor (like Notepad) and add the following code, replacing the path with your Oracle ORDS direct...