You are on page 1of 2

--set serverout on size 1000000

--spool remove_special_chars.txt
DECLARE
l_true NUMBER := hr_api.g_true_num;
l_false NUMBER := hr_api.g_false_num;
l_plan_id NUMBER := &PLAN_ID;
l_scorecard_id NUMBER := &SCORECARD_ID;
CURSOR csr_pend_txns(p_plan_id NUMBER,p_sc_id NUMBER) IS
SELECT txn.transaction_id, txn.creator_person_id,sc.scorecard_id,sc.person_i
d
FROM hr_api_transactions txn
,per_personal_scorecards sc
WHERE sc.plan_id = p_plan_id
AND (p_sc_id IS NULL OR sc.scorecard_id = p_sc_id)
AND sc.scorecard_id = txn.transaction_ref_id
AND sc.status_code = 'TRANSFER'
AND txn.transaction_ref_table = 'PER_PERSONAL_SCORECARDS'
AND txn.transaction_document IS NOT NULL;
--
CURSOR csr_clob (p_txn_id NUMBER) IS
SELECT transaction_document
FROM hr_api_transactions
WHERE transaction_id = p_txn_id;
l_txn_clob CLOB;
--
--
PROCEDURE remove_special_char(p_transaction_id IN NUMBER) IS
l_original_clob clob;
l_length NUMBER;
curr_pos NUMBER;
l_curr_char VARCHAR2(10);
l_new_string VARCHAR2(100);
l_revised_lob CLOB;
BEGIN
SELECT transaction_document
INTO l_original_clob
FROM hr_api_transactions
WHERE transaction_id = p_transaction_id;
l_length := length(l_original_clob);
curr_pos := 1;
FOR i in 1 .. l_length
LOOP
l_curr_char := SUBSTR(l_original_clob,curr_pos,1);
IF (ascii(l_curr_char) >= 0 AND ascii(l_curr_char) <= 127) THEN
l_revised_lob := l_revised_lob||l_curr_char;
END IF;
curr_pos := curr_pos+1;
END LOOP;
UPDATE hr_api_transactions
SET transaction_document = l_revised_lob
WHERE transaction_id = p_transaction_id;
---
-- dbms_output.put_line('New String:'||l_new_string);
END remove_special_char;
--
--
BEGIN
FOR i IN csr_pend_txns(l_plan_id,l_scorecard_id)
LOOP
BEGIN
OPEN csr_clob(i.transaction_id);
FETCH csr_clob INTO l_txn_clob;
CLOSE csr_clob;
dbms_output.put_line('Now trying modify scorecard id: '||i.scorecard_id);
-- now remove any special characters..
BEGIN
remove_special_char(i.transaction_id);
dbms_output.put_line('Successfully removed special characters:'||i.scor
ecard_id);
EXCEPTION WHEN OTHERS THEN
dbms_output.put_line('Error for Sc_id while removing special char:'||i
.scorecard_id);
dbms_output.put_line(substr(sqlerrm,1,240));
END;
dbms_output.put_line('Updating status back to manager for sc:'||i.scorecard
_id);
--
UPDATE per_personal_scorecards
SET status_code = 'NOT_STARTED_WITH_MGR'
WHERE scorecard_id = i.scorecard_id;
EXCEPTION WHEN OTHERS THEN
dbms_output.put_line('Error for Sc_id :'||i.scorecard_id);
dbms_output.put_line(substr(sqlerrm,1,240));
END;
END LOOP;
COMMIT;
END;
/
--spool off

You might also like