PLS-00363
While compiling new package i receive following error in this statement:
BEGIN
l_STATUS :=1;
SELECT NULL INTO DUMMY FROM EM_DA.OE62_INFO
WHERE p_ch_message_code_i IN ('0001','0002')
AND IZD=p_ch_izda_i
AND EN=p_ch_eno_i
AND PR=p_ch_pr_class_i
AND KL=p_ch_kl_id_i;
l_STATUS :=3;
EXCEPTION WHEN NO_DATA_FOUND THEN NULL;
END;
ERROR: PLS-00363: expression 'l_STATUS' cannot be used as an assignment target
Parameters in package body are declared;
DUMMY VARCHAR2,
l_status VARCHAR2)
Any help will be apreciated.
Regards,
Robert
Edited by: user8660054 on 31.8.2010 4:19
jurgenk wrote:
Or declare the parameter as an OUT parameter.Just be aware that if you do change the parameter to be an OUT parameter, the calling program will have the value of its variable changed as well. If that is the intention, and it is not entirely clear form the code snippet posted, then that is fine, but if the calling program does not expect this behaviour, it will cause problems.
John
Similar Messages
-
Help on ORA-06550 & PLS-00363 Error while running a procedure from a packag
Greeting All,
I ran the following procedure from a package on a command line in sqlplus:
SQL> exec QUALITY_ASSURANCE.COPY_SW_RESOURCES(2009,2010,9508);Where '2009' is the old fiscal year, '2010' is the new fiscal year and '9508' is the error code passed from the calling program. But, I received the following error messages:
ERROR at line 1:
ORA-06550: line 1, column 53:
PLS-00363: expression '9508' cannot be used as an assignment target
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
Any thoughts, suggestions and/or advice to resolve these errors.
Thanks in advance.Orchid wrote:
Justin,
Thanks for your response and information. Yes, Theoa was correct the 3rd parameter is an OUT variable, and it is a numeric field. The procedure was called by a form as follows:
QUALITY_ASSURANCE.COPY_SW_RESOURCES(:BLK_CONTROL.FROMFY,:BLK_CONTROL.TOFY,V_ERR);But the form does not work so I am trying to isolate the problem by running the procedure by itself in sqlplus to make sure there is no problem with the procedure.
Yesterday, I was able to run the procedure in Toad for Oracle to a successful completion by providing the 3 parameters: (2009, 2010, null). Just wonder why I cannot run the same procedure with the same parameters on a command line in sqlplus as follows:
exec QUALITY_ASSURANCE.COPY_SW_RESOURCES(2009,2010,null);So, if I understand your suggestion correctly, in order to run the procedure with the 3 parameter successfully in sqlplus,
I have to declare the 3rd parameter in PL/SQL. That is to create a PL/SQL file as suggested and run the file, correct? CORRECT! -
'PLS-00363: expression..' error when executing a stored procedure with in o
Hello,
I'm trying to run a PLSQL script containing an ORACLE API but its failing on compilation with the message:
'PLS-00363: expression '<expression>' cannot be used as an assignment target'.
As far as I understand its connected to my IN-OUT parameters but I can't figure out which (I must admit I'm still hiking up a steep learning curve here and I've cut and pasted someone elses example and modified it).
I would be most grateful if one of you pro's could read through my code and advise..
many thanks,
Steveni guess you are trying to store value in your IN parameter.
here is an example
SQL> create or replace procedure pr(p in integer)
2 as
3 begin
4 p := 1;
5 end;
6 /
Warning: Procedure created with compilation errors.
SQL> show err
Errors for PROCEDURE PR:
LINE/COL ERROR
4/2 PL/SQL: Statement ignored
4/2 PLS-00363: expression 'P' cannot be used as an assignment targetSee it also gives the exact line in which the error has occurred. so see that and fix it.
Edited by: Karthick_Arp on Feb 12, 2009 1:57 AM -
Hello,
I'm trying to run a PLSQL script containing an ORACLE API but its failing on compilation with the message:
'PLS-00363: expression '<expression>' cannot be used as an assignment target'.
As far as I understand its connected to my IN-OUT parameters but I can't figure out which (I must admit I'm still hiking up a steep learning curve here and I've cut and pasted someone elses example and modified it).
I would be most grateful if one of you pro's could read through my code and advise..
SET serveroutput ON SIZE 1000000 FORMAT WRAPPED
SET verify OFF
SET feedback OFF
DECLARE
error_msg varchar2(2000) := '';
l_status varchar2(10) := 'True';
l_validate_cnt number;
l_ass_count number;
l_business_group_id number := 0;
l_validate BOOLEAN DEFAULT FALSE;
l_city varchar2(30);
l_mode varchar2(20) := 'UPDATE';
l_sup_join_date date;
l_organization_id hr_organization_units.organization_id%type;
l_person_id per_all_people_f.person_id%type;
l_object_version_number per_all_assignments_f.object_version_number%type;
l_job_id per_jobs.job_id%type;
l_position_id per_positions.position_id%type;
l_location_id number := 233; -- number;
l_grade_id number := 3; -- per_grades.grade_id%type;
l_supervisor_id number := 2; -- per_all_assignments_f.supervisor_id%type;
l_assignment_status_type_id number;
l_pay_basis_id number := 33;
l_join_date date;
l_assignment_id per_all_assignments_f.assignment_id%type;
l_soft_coding_keyflex_id per_all_assignments_f.soft_coding_keyflex_id%type;
l_people_group_id per_all_assignments_f.people_group_id%type;
l_payroll_id per_all_assignments_f.payroll_id%type;
l_effective_start_date per_all_assignments_f.effective_start_date%type;
l_effective_end_date per_all_assignments_f.effective_end_date%type;
l_assignment_sequence per_all_assignments_f.assignment_sequence%type;
l_comment_id per_all_assignments_f.comment_id%type;
l_concatenated_segments varchar2(240);
l_group_name varchar2(100);
l_other_manager_warning boolean;
l_org_now_no_manager_warning boolean;
l_spp_delete_warning boolean;
l_entries_changed_warning varchar2(200);
l_tax_district_changed_warning boolean;
l_special_ceiling_step_id number;
l_no_managers_warning boolean;
l_other_manager_warnings boolean;
l_cagr_grade_def_id number;
l_cagr_concatenated_segments varchar2(100);
l_total_records number := 0;
l_success_records number := 0;
l_failure_records number := 0;
BEGIN
dbms_output.put_line('#############################################################');
dbms_output.put_line('Data Migration Of Employee Assignments :');
dbms_output.put_line('#############################################################');
dbms_output.put_line('Start Time : ' || TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS'));
l_person_id := null;
l_object_version_number := null;
l_organization_id := 0;
l_location_id := null;
l_grade_id := null;
l_job_id := null;
l_position_id := null;
l_supervisor_id := null;
l_assignment_status_type_id := null;
error_msg := null;
l_status := 'True';
hr_assignment_api.update_emp_asg_criteria
p_validate => l_validate
,p_effective_date => sysdate --to_date('11-Jan-2009','DD-MON-YYYY')
,p_datetrack_update_mode => l_mode
,p_assignment_id => l_assignment_id
,p_object_version_number => l_object_version_number +1
,p_organization_id => l_organization_id
,p_location_id => l_location_id --assignment_v.location_id
,p_grade_id => l_grade_id
,p_job_id => l_job_id
,p_position_id => l_position_id
,p_payroll_id => l_payroll_id --21--hardcoding this you should change this
-- ,p_segment1 => assignment_v.people_group
-- ,p_employment_category => assignment_v.employee_category
,p_pay_basis_id => l_pay_basis_id
,p_special_ceiling_step_id => l_special_ceiling_step_id
,p_people_group_id => l_people_group_id
,p_group_name => l_group_name
,p_org_now_no_manager_warning => l_org_now_no_manager_warning
,p_effective_start_date => l_effective_start_date
,p_effective_end_date => l_effective_end_date
,p_other_manager_warning => l_other_manager_warning
,p_spp_delete_warning => l_spp_delete_warning
,p_entries_changed_warning => l_entries_changed_warning
,p_tax_district_changed_warning => l_tax_district_changed_warning
hr_assignment_api.update_emp_asg
p_validate => l_validate --false
,p_effective_date => to_date('11-Jan-2009','DD-MON-YYYY') --assignment_v.date_of_change
,p_datetrack_update_mode => 'CORRECTION'
,p_assignment_id => l_assignment_id
,p_object_version_number => l_object_version_number
,p_supervisor_id => l_supervisor_id
,p_normal_hours => '7.5'
,p_frequency => 'D'
,p_time_normal_start => '09:30'
,p_time_normal_finish => '17:30'
,p_soft_coding_keyflex_id => l_soft_coding_keyflex_id
,p_comment_id => l_comment_id
,p_effective_start_date => l_effective_start_date
,p_effective_end_date => l_effective_end_date
,p_concatenated_segments => l_concatenated_segments
,p_no_managers_warning => l_no_managers_warning
,p_other_manager_warning => l_other_manager_warnings
,p_cagr_grade_def_id => l_cagr_grade_def_id
,p_cagr_concatenated_segments => l_cagr_concatenated_segments
dbms_output.put_line('End Time : ' || TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS'));
dbms_output.put_line('
END;
commit;
exit;many thanks,
StevenThanks for the suggestions people. Here's the other API description requested:
PROCEDURE UPDATE_EMP_ASG
Argument Name Type In/Out Default?
P_VALIDATE BOOLEAN IN DEFAULT
P_EFFECTIVE_DATE DATE IN
P_DATETRACK_UPDATE_MODE VARCHAR2 IN
P_ASSIGNMENT_ID NUMBER IN
P_OBJECT_VERSION_NUMBER NUMBER IN/OUT
P_SUPERVISOR_ID NUMBER IN DEFAULT
P_ASSIGNMENT_NUMBER VARCHAR2 IN DEFAULT
P_CHANGE_REASON VARCHAR2 IN DEFAULT
P_ASSIGNMENT_STATUS_TYPE_ID NUMBER IN DEFAULT
P_COMMENTS VARCHAR2 IN DEFAULT
P_DATE_PROBATION_END DATE IN DEFAULT
P_DEFAULT_CODE_COMB_ID NUMBER IN DEFAULT
P_FREQUENCY VARCHAR2 IN DEFAULT
P_INTERNAL_ADDRESS_LINE VARCHAR2 IN DEFAULT
P_MANAGER_FLAG VARCHAR2 IN DEFAULT
P_NORMAL_HOURS NUMBER IN DEFAULT
P_PERF_REVIEW_PERIOD NUMBER IN DEFAULT
P_PERF_REVIEW_PERIOD_FREQUENCY VARCHAR2 IN DEFAULT
P_PROBATION_PERIOD NUMBER IN DEFAULT
P_PROBATION_UNIT VARCHAR2 IN DEFAULT
P_SAL_REVIEW_PERIOD NUMBER IN DEFAULT
P_SAL_REVIEW_PERIOD_FREQUENCY VARCHAR2 IN DEFAULT
P_SET_OF_BOOKS_ID NUMBER IN DEFAULT
P_SOURCE_TYPE VARCHAR2 IN DEFAULT
P_TIME_NORMAL_FINISH VARCHAR2 IN DEFAULT
P_TIME_NORMAL_START VARCHAR2 IN DEFAULT
P_BARGAINING_UNIT_CODE VARCHAR2 IN DEFAULT
P_LABOUR_UNION_MEMBER_FLAG VARCHAR2 IN DEFAULT
P_HOURLY_SALARIED_CODE VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE_CATEGORY VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE1 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE2 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE3 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE4 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE5 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE6 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE7 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE8 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE9 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE10 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE11 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE12 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE13 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE14 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE15 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE16 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE17 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE18 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE19 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE20 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE21 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE22 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE23 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE24 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE25 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE26 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE27 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE28 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE29 VARCHAR2 IN DEFAULT
P_ASS_ATTRIBUTE30 VARCHAR2 IN DEFAULT
P_TITLE VARCHAR2 IN DEFAULT
P_SEGMENT1 VARCHAR2 IN DEFAULT
P_SEGMENT2 VARCHAR2 IN DEFAULT
P_SEGMENT3 VARCHAR2 IN DEFAULT
P_SEGMENT4 VARCHAR2 IN DEFAULT
P_SEGMENT5 VARCHAR2 IN DEFAULT
P_SEGMENT6 VARCHAR2 IN DEFAULT
P_SEGMENT7 VARCHAR2 IN DEFAULT
P_SEGMENT8 VARCHAR2 IN DEFAULT
P_SEGMENT9 VARCHAR2 IN DEFAULT
P_SEGMENT10 VARCHAR2 IN DEFAULT
P_SEGMENT11 VARCHAR2 IN DEFAULT
P_SEGMENT12 VARCHAR2 IN DEFAULT
P_SEGMENT13 VARCHAR2 IN DEFAULT
P_SEGMENT14 VARCHAR2 IN DEFAULT
P_SEGMENT15 VARCHAR2 IN DEFAULT
P_SEGMENT16 VARCHAR2 IN DEFAULT
P_SEGMENT17 VARCHAR2 IN DEFAULT
P_SEGMENT18 VARCHAR2 IN DEFAULT
P_SEGMENT19 VARCHAR2 IN DEFAULT
P_SEGMENT20 VARCHAR2 IN DEFAULT
P_SEGMENT21 VARCHAR2 IN DEFAULT
P_SEGMENT22 VARCHAR2 IN DEFAULT
P_SEGMENT23 VARCHAR2 IN DEFAULT
P_SEGMENT24 VARCHAR2 IN DEFAULT
P_SEGMENT25 VARCHAR2 IN DEFAULT
P_SEGMENT26 VARCHAR2 IN DEFAULT
P_SEGMENT27 VARCHAR2 IN DEFAULT
P_SEGMENT28 VARCHAR2 IN DEFAULT
P_SEGMENT29 VARCHAR2 IN DEFAULT
P_SEGMENT30 VARCHAR2 IN DEFAULT
P_CONCAT_SEGMENTS VARCHAR2 IN DEFAULT
P_CONTRACT_ID NUMBER IN DEFAULT
P_ESTABLISHMENT_ID NUMBER IN DEFAULT
P_COLLECTIVE_AGREEMENT_ID NUMBER IN DEFAULT
P_CAGR_ID_FLEX_NUM NUMBER IN DEFAULT
P_CAG_SEGMENT1 VARCHAR2 IN DEFAULT
P_CAG_SEGMENT2 VARCHAR2 IN DEFAULT
P_CAG_SEGMENT3 VARCHAR2 IN DEFAULT
P_CAG_SEGMENT4 VARCHAR2 IN DEFAULT
P_CAG_SEGMENT5 VARCHAR2 IN DEFAULT
P_CAG_SEGMENT6 VARCHAR2 IN DEFAULT
P_CAG_SEGMENT7 VARCHAR2 IN DEFAULT
P_CAG_SEGMENT8 VARCHAR2 IN DEFAULT
P_CAG_SEGMENT9 VARCHAR2 IN DEFAULT
P_CAG_SEGMENT10 VARCHAR2 IN DEFAULT
P_CAG_SEGMENT11 VARCHAR2 IN DEFAULT
P_CAG_SEGMENT12 VARCHAR2 IN DEFAULT
P_CAG_SEGMENT13 VARCHAR2 IN DEFAULT
P_CAG_SEGMENT14 VARCHAR2 IN DEFAULT
P_CAG_SEGMENT15 VARCHAR2 IN DEFAULT
P_CAG_SEGMENT16 VARCHAR2 IN DEFAULT
P_CAG_SEGMENT17 VARCHAR2 IN DEFAULT
P_CAG_SEGMENT18 VARCHAR2 IN DEFAULT
P_CAG_SEGMENT19 VARCHAR2 IN DEFAULT
P_CAG_SEGMENT20 VARCHAR2 IN DEFAULT
P_NOTICE_PERIOD NUMBER IN DEFAULT
P_NOTICE_PERIOD_UOM VARCHAR2 IN DEFAULT
P_EMPLOYEE_CATEGORY VARCHAR2 IN DEFAULT
P_WORK_AT_HOME VARCHAR2 IN DEFAULT
P_JOB_POST_SOURCE_NAME VARCHAR2 IN DEFAULT
P_SUPERVISOR_ASSIGNMENT_ID NUMBER IN DEFAULT
P_CAGR_GRADE_DEF_ID NUMBER IN/OUT
P_CAGR_CONCATENATED_SEGMENTS VARCHAR2 OUT
P_CONCATENATED_SEGMENTS VARCHAR2 OUT
P_SOFT_CODING_KEYFLEX_ID NUMBER IN/OUT
P_COMMENT_ID NUMBER OUT
P_EFFECTIVE_START_DATE DATE OUT
P_EFFECTIVE_END_DATE DATE OUT
P_NO_MANAGERS_WARNING BOOLEAN OUT
P_OTHER_MANAGER_WARNING BOOLEAN OUT
P_HOURLY_SALARIED_WARNING BOOLEAN OUT
P_GSP_POST_PROCESS_WARNING VARCHAR2 OUT On looking on the web I've found that my latest error message - ORA-20001: The primary key specified is invalid
Cause: The primary key values specified are invalid and do not exist in
the schema.
Action: Check the primary key values... - relates to incorrect combination of person_id,object_version_number,effective_start_date and effective_end_date - all of which seem OK to me - her's my latest version of my code.. Many thanks again.
SET serveroutput ON SIZE 1000000 FORMAT WRAPPED
SET verify OFF
SET feedback OFF
DECLARE
error_msg varchar2(2000);
l_status varchar2(10);
l_validate_cnt number;
l_ass_count number;
l_validate BOOLEAN DEFAULT FALSE;
l_city varchar2(30);
l_mode varchar2(20) := 'UPDATE';
l_organization_id number;
l_effective_date date := '12-FEB-09';
l_person_id number := '29987';
l_object_version_number number := '3';
l_effective_start_date date := '12-FEB-09';
l_effective_end_date date := '12-FEB-56';
l_job_id per_jobs.job_id%type;
l_position_id per_positions.position_id%type;
l_location_id number;
l_grade_id number;
l_supervisor_id number;
l_assignment_status_type_id number;
l_pay_basis_id number;
l_join_date date;
l_soft_coding_keyflex_id number;
l_people_group_id per_all_assignments_f.people_group_id%type;
l_payroll_id per_all_assignments_f.payroll_id%type;
l_assignment_sequence per_all_assignments_f.assignment_sequence%type;
l_comment_id per_all_assignments_f.comment_id%type;
l_normal_end varchar2(15) := '17:30';
l_normal_start varchar2(15) := '09:30';
l_frequency varchar2(10) := 'D';
l_normal_hours varchar2(25) := '7.5';
l_assignment_id number := '29884';
l_gsp_post_process_warning varchar2(30);
l_entries_changed varchar2(30);
l_old_obj_ver_number per_addresses.OBJECT_VERSION_NUMBER%type;
l_segment1 varchar2(25);
l_segment2 varchar2(25);
l_segment3 varchar2(25);
l_concatenated_segments varchar2(240);
l_group_name varchar2(100);
l_other_manager_warning boolean;
l_org_now_no_manager_warning boolean;
l_spp_delete_warning boolean;
l_entries_changed_warning varchar2(200);
l_tax_district_changed_warning boolean;
l_special_ceiling_step_id number;
l_no_managers_warning boolean;
l_other_manager_warnings boolean;
l_cagr_grade_def_id number;
l_cagr_concatenated_segments varchar2(100);
l_datetrack_update_mod varchar2(10);
l_total_records number := 0;
l_success_records number := 0;
l_failure_records number := 0;
BEGIN
dbms_output.put_line('#############################################################');
dbms_output.put_line('Data Migration Of Employee Assignments :');
dbms_output.put_line('#############################################################');
dbms_output.put_line('Start Time : ' || TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS'));
l_person_id := null;
l_object_version_number := null;
l_organization_id := null;
l_location_id := null;
l_grade_id := null;
l_job_id := null;
l_position_id := null;
l_supervisor_id := null;
l_assignment_status_type_id := null;
error_msg := null;
l_status := 'True';
hr_assignment_api.update_emp_asg_criteria (
p_effective_date => l_effective_date ,p_datetrack_update_mode => l_datetrack_update_mod ,p_assignment_id => l_assignment_id ,p_called_from_mass_update => NULL ,p_grade_id => l_grade_id ,p_position_id => l_position_id ,p_job_id => l_job_id ,p_payroll_id => l_payroll_id ,p_location_id => l_location_id ,p_organization_id => l_organization_id ,p_pay_basis_id => l_pay_basis_id
,p_segment1 => l_segment1
,p_segment2 => l_segment2
,p_segment3 => l_segment3 ,p_employment_category => NULL ,p_concat_segments => NULL ,p_contract_id => NULL ,p_establishment_id => NULL ,p_scl_segment1 => NULL ,p_grade_ladder_pgm_id => NULL ,p_supervisor_assignment_id => NULL ,p_object_version_number => l_old_obj_ver_number ,p_special_ceiling_step_id => l_special_ceiling_step_id ,p_people_group_id => l_people_group_id ,p_soft_coding_keyflex_id => l_soft_coding_keyflex_id ,p_group_name => l_group_name ,p_effective_start_date => l_effective_start_date ,p_effective_end_date => l_effective_end_date ,p_org_now_no_manager_warning => l_org_now_no_manager_warning ,p_other_manager_warning => l_other_manager_warning ,p_spp_delete_warning => l_spp_delete_warning ,p_entries_changed_warning => l_entries_changed ,p_tax_district_changed_warning => l_tax_district_changed_warning ,p_concatenated_segments => l_concatenated_segments ,p_gsp_post_process_warning => l_gsp_post_process_warning);
hr_assignment_api.update_emp_asg
p_validate => l_validate
,p_effective_date => l_effective_date
,p_datetrack_update_mode => l_datetrack_update_mod --'CORRECTION'
,p_assignment_id => l_assignment_id
,p_object_version_number => l_object_version_number
,p_supervisor_id => l_supervisor_id
,p_normal_hours => l_normal_hours --'7.5'
,p_frequency => l_frequency --'D'
,p_time_normal_start => l_normal_start --'09:30'
,p_time_normal_finish => l_normal_end --'17:30'
,p_soft_coding_keyflex_id => l_soft_coding_keyflex_id
,p_comment_id => l_comment_id
,p_effective_start_date => l_effective_start_date
,p_effective_end_date => l_effective_end_date
,p_concatenated_segments => l_concatenated_segments
,p_no_managers_warning => l_no_managers_warning
,p_other_manager_warning => l_other_manager_warnings
,p_cagr_grade_def_id => l_cagr_grade_def_id
,p_cagr_concatenated_segments => l_cagr_concatenated_segments
dbms_output.put_line('End Time : ' || TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS'));
dbms_output.put_line('
END;
commit;
exit; -
Objects containing objects.Expr cannot be used as an assignment.PLS-00363.
Hi,
My database: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0.
I'm working with Object types containing other object types, and I'm getting the error PLS-00363 (Expression cannot be used as an assignment).
I'm putting exlpicity all 'SELF' parameters as 'IN OUT', but still get the error...
CREATE OR REPLACE TYPE TYP_PERSON AS OBJECT (
strName VARCHAR2(100),
--+
CONSTRUCTOR FUNCTION TYP_PERSON RETURN SELF AS RESULT,
--+
MEMBER FUNCTION getName (SELF IN OUT TYP_PERSON) RETURN VARCHAR2,
MEMBER PROCEDURE setName (SELF IN OUT TYP_PERSON, pNewName VARCHAR2)
+) NOT FINAL;+
+/+
--+
CREATE OR REPLACE TYPE BODY TYP_PERSON AS
--+
CONSTRUCTOR FUNCTION TYP_PERSON RETURN SELF AS RESULT IS
BEGIN
SELF.strName := NULL;
RETURN;
END;
--+
MEMBER FUNCTION getName (SELF IN OUT TYP_PERSON) RETURN VARCHAR2 IS
BEGIN
RETURN SELF.strName;
END;
--+
MEMBER PROCEDURE setName (SELF IN OUT TYP_PERSON, pNewName VARCHAR2) IS
BEGIN
SELF.strName := pNewName;
END;
END;
+/+
--+
CREATE OR REPLACE TYPE TYP_PERSONS AS TABLE OF TYP_PERSON;
--+
CREATE OR REPLACE TYPE TYP_CREW AS OBJECT (
strName VARCHAR2(100),
persons TYP_PERSONS,
--+
CONSTRUCTOR FUNCTION TYP_CREW RETURN SELF AS RESULT,
--+
MEMBER FUNCTION getName (SELF IN OUT TYP_CREW) RETURN VARCHAR2,
MEMBER PROCEDURE setName (SELF IN OUT TYP_CREW, pNewName VARCHAR2),
--+
MEMBER PROCEDURE addPerson (SELF IN OUT TYP_CREW, pPersonName IN VARCHAR2),
MEMBER FUNCTION getPerson (SELF IN OUT TYP_CREW, pIndex IN NUMBER) RETURN TYP_PERSON,
MEMBER FUNCTION getPersons (SELF IN OUT TYP_CREW) RETURN TYP_PERSONS
+) NOT FINAL;+
+/+
--+
CREATE OR REPLACE TYPE BODY TYP_CREW AS
--+
CONSTRUCTOR FUNCTION TYP_CREW RETURN SELF AS RESULT IS
BEGIN
SELF.strName := NULL;
SELF.persons := TYP_PERSONS();
RETURN;
END;
--+
MEMBER FUNCTION getName (SELF IN OUT TYP_CREW) RETURN VARCHAR2 IS
BEGIN
RETURN SELF.strName;
END;
--+
MEMBER PROCEDURE setName (SELF IN OUT TYP_CREW, pNewName VARCHAR2) IS
BEGIN
SELF.strName := pNewName;
END;
MEMBER PROCEDURE addPerson (SELF IN OUT TYP_CREW, pPersonName IN VARCHAR2) IS
BEGIN
SELF.persons.EXTEND();
SELF.persons(SELF.persons.LAST) := TYP_PERSON(pPersonName);
END;
MEMBER FUNCTION getPerson (SELF IN OUT TYP_CREW, pIndex IN NUMBER) RETURN TYP_PERSON IS
BEGIN
IF SELF.persons.COUNT > 0 THEN
RETURN SELF.getPersons()(pIndex);
END IF;
RETURN NULL;
END;
MEMBER FUNCTION getPersons (SELF IN OUT TYP_CREW) RETURN TYP_PERSONS IS
BEGIN
RETURN SELF.persons;
END;
END;
+/+
--+
DECLARE
crew_one TYP_CREW;
BEGIN
crew_one := TYP_CREW();
crew_one.setName('The last crew on Earth');
crew_one.addPerson ('Michael Knight');
crew_one.addPerson ('Agent Mulder');
crew_one.addPerson ('Agent Scully');
crew_one.addPerson ('Frodo Bolson');
for i in crew_one.persons.FIRST..crew_one.persons.LAST LOOP
dbms_output.put_line('Person ['||i||']: '||crew_one.persons(i).getName());
end loop;
crew_one.getPerson(1).setName ('Michael Knight-----');
crew_one.getPerson(2).setName ('Agent Mulder---');
crew_one.getPerson(3).setName ('Agent Scully---');
crew_one.getPerson(4).setName ('Frodo Bolson----');
for i in crew_one.persons.FIRST..crew_one.persons.LAST LOOP
dbms_output.put_line('Person ['||i||']: '||crew_one.persons(i).getName());
end loop;
END;
How can I do this ParentObject().getChildObject().setChildFunction()?
Thanks in advance,
Donato.You completely misunderstand objects. Use:
DECLARE
crew_one TYP_CREW;
BEGIN
crew_one := TYP_CREW();
crew_one.setName('The last crew on Earth');
crew_one.addPerson ('Michael Knight');
crew_one.addPerson ('Agent Mulder');
crew_one.addPerson ('Agent Scully');
crew_one.addPerson ('Frodo Bolson');
for i in crew_one.persons.FIRST..crew_one.persons.LAST LOOP
dbms_output.put_line('Person ['||i||']: '||crew_one.persons(i).getName());
end loop;
TYP_PERSON.setName (crew_one.persons(1),'Michael Knight-----');
TYP_PERSON.setName (crew_one.persons(2),'Agent Mulder---');
TYP_PERSON.setName (crew_one.persons(3),'Agent Scully---');
TYP_PERSON.setName (crew_one.persons(4),'Frodo Bolson----');
for i in crew_one.persons.FIRST..crew_one.persons.LAST LOOP
dbms_output.put_line('Person ['||i||']: '||crew_one.persons(i).getName());
end loop;
END;
Person [1]: Michael Knight
Person [2]: Agent Mulder
Person [3]: Agent Scully
Person [4]: Frodo Bolson
Person [1]: Michael Knight-----
Person [2]: Agent Mulder---
Person [3]: Agent Scully---
Person [4]: Frodo Bolson----
PL/SQL procedure successfully completed.
SQL> SY. -
PLS-00363: expression cannot be used as an assignment target
Hi,
Oralce9.2
when I run the insert procedure I get the below error:
Procedure
PROCEDURE proc_one_insert(col1 IN OUT numeric,
col2 IN num,
col3 IN numeric
BEGIN
execute immediate proc_one_insert(2,1,111);
END;
Error
PLS-00363: expression '2' cannot be used as an assignment target
How to solve the above error ?
With Regards
Edited by: user640001 on Dec 2, 2010 3:04 AMArun has shown you an example using PL/SQL. If you want to do something similar in other languages you have to use their style of variable declaration e.g. if you wanted to do it through SQL*Plus, you need to declare the variable within SQL*Plus itself and bind that into your calls e.g.
SQL> create procedure p_inout (p_val in out number) is
2 begin
3 p_val := p_val*10;
4 end;
5 /
Procedure created.
SQL> var mynum number
SQL> exec :mynum := 10;
PL/SQL procedure successfully completed.
SQL> print mynum
MYNUM
10
SQL> exec p_inout(:mynum);
PL/SQL procedure successfully completed.
SQL> print mynum
MYNUM
100
SQL> -
Hello,
i've created a package, but at compile, i got pls-00363
create or replace package OSAPI_NI as
procedure my_proc(SID number, cod_prefix varchar2, numar varchar2);
end OSAPI_NI;
show errors package OSAPI_NI;
CREATE OR REPLACE PACKAGE BODY OSAPI_NI as
procedure my_proc(SID number, cod_prefix varchar2, numar varchar2) is
begin
SID := null;
cod_prefix := null;
numar := null;
end;
end OSAPI_NI;LINE/COL ERROR
4/5 PLS-00363: expression 'SID' cannot be used as an assignment target
4/5 PL/SQL: Statement ignored
5/5 PLS-00363: expression 'COD_PREFIX' cannot be used as an assignment target
5/5 PL/SQL: Statement ignored
6/5 PLS-00363: expression 'NUMAR' cannot be used as an assignment target
6/5 PL/SQL: Statement ignored
Why those cannot be null? This package is just for test..
Thanks!Since you are not specifying the mode of the three parameters of procedure my_proc, Oracle assumes the default, which is IN. You will have to define them as OUT.
CREATE OR REPLACE PACKAGE BODY OSAPI_NI as
procedure my_proc(SID OUT number, cod_prefix OUT varchar2, numar OUT varchar2) is
begin
SID := null;
cod_prefix := null;
numar := null;
end;
end OSAPI_NI; -
PLS-00363: expression '' cannot be used as an assignment target - HELP :-(
Hi Guys,
This is a procedure I have in the body of a package:
PROCEDURE SUM_EVENTS (p_trial_no IN NUMBER,
p_country_resion IN VARCHAR2,
p_loc_no IN NUMBER,
p_setup_flag IN VARCHAR2,
p_event_changed IN OUT NUMBER) ISWhen I call this in SQLplus with this:
exec DB_CALC.sum_events(340,'USA',1,'Y',3700);I get this:
ERROR at line 1:
ORA-06550: line 1, column 54:
PLS-00363: expression '3700' cannot be used as an assignment target
ORA-06550: line 1, column 7:
PL/SQL: Statement ignoredAny ideas what I'm doing wrong?
Thanks!p_event_changed is declared as an IN OUT parameter. You need to provide a variable in which the OUT values can be written to..
something like
declare
out_val number := 3700;
begin
DB_CALC.sum_events(340,'USA',1,'Y',out_val);
end; -
PLS-00363: expression 'I' cannot be used as an assignment target
Hello all
I have a Package and I have one procedure in it .
I have use dmlset inside this .
Inside that procedure I have a cursor and inside the FOR loop I have mentioned something .
FOR i IN 1 .. No_of_rec LOOP
If....
End if ;
i := i+1 ;
END LOOP;
I have mentioned before end loop i := i+1 ; when i execute this package it is showing this error .
"PLS-00363: expression 'I' cannot be used as an assignment target"
What could be the problem?Of course,
My example is showing that index I in loop is same thing as parameter IN in procedure1. Its value, not reference. I is passed as VALUE to LOOP just like PARAM1 is passed as value to PROCEDURE1. Trying to assignment something to I or PARAM1 will generate same error.
Also another interesting example is
CREATE OR REPLACE
PROCEDURE procedure1(
param1 IN OUT NUMBER)
AS
BEGIN
param1 := 0;
END procedure1;
BEGIN
FOR i IN 1..3
LOOP
procedure1(i);
END LOOP;
END;
In this case procedure1 is correct but loop stmt is not. It will generate same error.
After doing this examples i also concluded that procedure cant return value it can modify existing value of variable which is declared (uninitialized or initialized, OUT or IN OUT ) in upper PLSQL block (named or unnamed PLSQL block) -
Hi everybody. I wrote de following type
create or replace TYPE ALMACEN AS OBJECT
id_almacen number(10),
descripcion varchar2(40),
existencias number(6),
precio number(4),
member function movimiento (p_num number) return boolean
create or replace TYPE BODY ALMACEN AS
member function movimiento (p_num number) return boolean AS
v_inf boolean;
n number(6);
BEGIN
if self.existencias+p_num>=0 then
self.existencias:=existencias+p_num;
return TRUE;
else return FALSE;
end if;
END movimiento;
END;
I have Oracle 11g release I.
In previous releases it worked, but now SQLDeveloper marks
self.existencias:=existencias+p_num;
Error PLS 00363 expression "string" cannot be used as an assignment target in sentence
Please, What's wrong?
Thanking in advanceHi,
Not quite a PL/SQL XML question but anyway...
Since the member function modifies the object instance, the implicit argument "self" must be declared explicitly as "IN OUT" :
member function movimiento (self in out nocopy almacen, p_num number) return boolean -
Error(120,9): PLS-00363:
hello guys,
i am facing an error about passing an out* parameter in procedure call.
the error is:
Error(120,9): PLS-00363: expression '<expression>' cannot be used as an assignment target
and the code is :
create or replace
PROCEDURE usp_abc
v_pct in number ,
v_pVt in number ,
vr_payagainst ,
vr_Todate
as
begin
usp_xyz (
v_pTrantype=>vr_payagainst,
v_pTrandate=>vr_Todate,
v_pcd=>v_pct,
v_pVd=>v_pVt,
*v_pLedgerID=>null*,-----------------> the line generating error
end;the parameter v_pLedgerID in procedure usp_xyz has been defined as
v_pLedgerID OUT NUMBER
could anyone help me in fixing that bug..
thank you very muchDid you look up the error message in the documentation?
PLS-00363: expression 'string' cannot be used as an assignment targetCause: A literal, constant, IN parameter, loop counter, or function call was mistakenly used as the target of an assignment. For example, the following statement is illegal because the assignment target, 30, is a literal: SELECT deptno INTO 30 FROM dept WHERE ... -- illegal
Action: Correct the statement by using a valid assignment target.>
If v_pLedgerID has been defined as an OUT parameter you can't assign a value to it when you call the procedure. Here is a simple example demonstrating this:
SQL > DECLARE
2 PROCEDURE test ( v_var OUT number)
3 AS
4 BEGIN
5 DBMS_OUTPUT.PUT_LINE(v_var);
6 END;
7 BEGIN
8 test(v_var => 30);
9 END;
10 /
test(v_var => 30);
ERROR at line 8:
ORA-06550: line 8, column 14:
PLS-00363: expression '30' cannot be used as an assignment target
ORA-06550: line 8, column 9:
PL/SQL: Statement ignored -
hi my friends, I have this procedure:
PROCEDURE incluir_alterar(
p_id_empresa IN VARCHAR2,
p_id_pessoa_juridica IN VARCHAR2,
p_cnpj IN VARCHAR2,
p_id_tipo_documento IN VARCHAR2,
p_ie IN VARCHAR2,
p_im IN VARCHAR2,
p_razaosocial IN VARCHAR2,
p_fantasia IN VARCHAR2,
p_ddd IN VARCHAR2,
p_telefone IN VARCHAR2,
p_fax IN VARCHAR2,
p_ddd_cel IN VARCHAR2,
p_fone_cel IN VARCHAR2,
p_email IN VARCHAR2,
p_nome_impresso IN VARCHAR2,
p_ramo IN VARCHAR2,
p_fatura_enviada IN VARCHAR2,
p_id_estado_cartao IN VARCHAR2,
p_id_matriz IN VARCHAR2,
p_cliente_categoria IN VARCHAR2,
p_end_extrato_cnv_empresa IN VARCHAR2,
p_agente IN VARCHAR2
IS
v_id_emp NUMBER;
v_encontrou BOOLEAN DEFAULT TRUE;
BEGIN
IF p_id_empresa IS NULL THEN
v_encontrou := FALSE;
ELSE
BEGIN
SELECT id_cliente INTO v_id_emp FROM frota_cliente WHERE id_cliente = p_id_empresa;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_encontrou:=FALSE;
END;
END IF;
IF NOT v_encontrou THEN
incluir(p_id_cliente => p_id_empresa);
ca_empresa_incluir_alterar(p_id_empresa => p_id_empresa, p_id_pessoa_juridica => p_id_pessoa_juridica,
p_cnpj => p_cnpj, p_id_tipo_documento => p_id_tipo_documento,
p_ie => p_ie, p_im => p_im,
p_razaosocial => p_razaosocial, p_fantasia => p_fantasia,
p_ddd => p_ddd, p_telefone => p_telefone,
p_fax => p_fax, p_ddd_cel => p_ddd_cel,
p_fone_cel => p_fone_cel, p_email => p_email,
p_nome_impresso => p_nome_impresso, p_ramo => p_ramo,
p_fatura_enviada => p_fatura_enviada, p_id_estado_cartao => p_id_estado_cartao,
p_id_matriz => p_id_matriz, p_cliente_categoria => p_cliente_categoria,
p_end_extrato_cnv_empresa => p_end_extrato_cnv_empresa, p_agente => p_agente);
ELSE
ca_empresa_incluir_alterar(p_id_empresa => p_id_empresa, p_id_pessoa_juridica => p_id_pessoa_juridica,
p_cnpj => p_cnpj, p_id_tipo_documento => p_id_tipo_documento,
p_ie => p_ie, p_im => p_im,
p_razaosocial => p_razaosocial, p_fantasia => p_fantasia,
p_ddd => p_ddd, p_telefone => p_telefone,
p_fax => p_fax, p_ddd_cel => p_ddd_cel,
p_fone_cel => p_fone_cel, p_email => p_email,
p_nome_impresso => p_nome_impresso, p_ramo => p_ramo,
p_fatura_enviada => p_fatura_enviada, p_id_estado_cartao => p_id_estado_cartao,
p_id_matriz => p_id_matriz, p_cliente_categoria => p_cliente_categoria,
p_end_extrato_cnv_empresa => p_end_extrato_cnv_empresa, p_agente => p_agente);
END IF;
END;error: PLS-00363: the expression '<expression>' cannot be used as designationMy guess: ca_empresa_incluir_alterar has OUT or IN OUT parameter(s).
As the parameters of incluir_alterar ar declared as IN, they may not be altered,
neither by direct assignment nor by passing them as OUT parameters to a
procedure.
hth, Urs -
Migration from Form 4.5 to 6.0 PLS-00363
Hello everyone,
I have a pll in Form 4.5 and now want to migrate to Form 6.0. When I compile it appears an this error:
PLS-00363: expression str cannot be used as an assignment target
Cause: A literal, constant, IN parameter, loop counter, or function call was mistakenly used as the target of an assignment. For example, the following statement is illegal because the assignment target, 30, is a literal:
SELECT deptno INTO 30 FROM dept WHERE ... -- illegal
Action: Correct the statement by using a valid assignment target.
This is an example:
TYPE Tday IS RECORD(
num number(2);
month varchar(20);
year number(4);
FUNCTION get_day (day IN Tday,...)
Begin
c_error := calcultate_year(pyear);
day.year := year;
End;
What do I should to do?
Thanks for the help!
nullyou define day as an IN parameter, so you're not allowed to change it's value. You could define it as IN OUT.
-
Whenever I try to add a database stored procedure in my crystal report using ODBC connection in the 'Set datasource Location' menu, it asks me for the discrete value for the parameters I specified in my stored procedure(Except for the REF cursor). My stored procedure seems to be correct but there seems to be a confusion within my crystal report. Once the values are entered it ends up by showing the following error message and my database source does not get added:
Databse Connector Error: 'HY000:[Oracle][ODBC][Ora]ORA-06550: line 1, column 18:PLS-00363: expression '01/01/2008' cannot be used as an assignment target
ORA-06550: line 1, column 31:PLS-00363: expression '01/01/2010' cannot be used as an assignment target
PL/SQL: Statement ignored
[Database Vendor Code: 6550 ]'
The only difference I am noticing is the REF Cursor is used in the Oracle SP. Whether the Crystal report can't differentiate my cursor or What could be the problem. Please provide me a solution for this
Note: The same is working when I change the database to any SQL
Seems to be the root cause for the problem is the parameters are getting renamed with the name of Stored procedure arguments once we change the database from SQL server to Oracle. Is there any possibilities to avoid this?
Thanks
Antony
Edited by: AntonyGR on Oct 11, 2011 1:32 PMWhat is the first arguement in the Oracle SP.Is it REF cusror or something else?
Also which ODBC driver you are using ?
Thanks,
Bilahari -
Hi,
We currently run Crystal Reports v10 with ODBC (CR Oracle ODBC Driver 4.20) to Oracle 9i database (on solaris) and have some reports which gets data (ref cursors) from stored procedures. So far so good and now we are upgrading our oracle database to 10g on Linux server and during my testing these reports give the following error.
Error Description:
Failed to open rowset
Query Engine Error: HY000:[DataDirect][ODBC Oracle driver]ORA-06550:line 1, column 8:
PLS-00306: wrong number or types of arguments in call to 'MY_STORED_PROCEDURE'
ORA-06550: line1, column 35:
PLS-00363: expression 'MY_PARAM_VALUE' cannot be used as an assignment target
ORA-6550: lin1, column8:
PL/SQL: Stateme'
Any help would be greatly appreciated.
Thanks,
-Venkat GopalanDiscovered on another post that 4.2 is too old. You need to upgrade to a more current ODBC driver that runs on Solaris.
We have a newer one version 5.3 but it's only for windows. Go to Datadirect.com and see if they have one for that OS.
Otherwise you'll have to configure your reports to use the native Oracle driver.
Thank you
Don
Maybe you are looking for
-
Language support seems not to work as it used to
As I recall it used to be that you could turn any version of Project into a foreign one by downloading the language. I have done this before for example for French, German, and Brazilian Portuguese, I think using project 2010 and Windows 7. I am no
-
Hi, I have a weird problem with my N73 ME phone. Sending sms' takes considerable time, sometimes as much as 2-3 minutes! And during this interval, no other application works! Even the incoming calls are not prompted! Is there a solution to this or ha
-
Flash Player Absturz in Firefox
Liebe Community, wir haben momentan ein seltsames Phänomen, welches wir nicht lösen, geschweige denn erklären können. Wenn man aus Lotus Notes 8.5.2 FP3 (unter Windows 7 32bit SP1) einen beliebigen Link öffnet und Firefox vorher noch nicht geöffnet w
-
How to get ship to party based on faglflexa-docno?
hi friends where can i find ship to party based on faglflexa - docno ? thanks in advance deepurd
-
How many contacts can you send a text to?
I cannot send a text to more than 10 contacts. How can I bypass this?