ABA



"כתיבת פרוצדורה ופונקציה ב SQL , צריך עזרה בתיקון טעויות סינטקס"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #21900 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 21900
Crazy Lion  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.7.02
16479 הודעות, 3 פידבק, 4 נקודות
   06:26   03.01.17   
אל הפורום  
  כתיבת פרוצדורה ופונקציה ב SQL , צריך עזרה בתיקון טעויות סינטקס  
 
   פעם ראשונה שאני רושם פרוצדורה ופונקציה ב SQL , יש לי בעיות סינטקס כאשר אני מריץ את זה ב אורקל לייב ,
להלן התרגיל והפתרון מתחתיו :
יש לכתוב Package בשם PKG_EMP אשר תכיל:
function get_no_of_children(emp_no number)
procedure get_emp_det(above_avrage char(1),year varchar2(4))

* ניתן יהיה לקרוא לפונקציה רק מתוך ה-Package

מטרת הפונקציה – להחזיר את מס' הילדים לעובד.
מטרת הפרוצדורה -
* לבדוק את ממוצע המשכורות של כלל העובדים
** להכניס לטבלת emp_details את פרטי העובדים מטבלת emp, כאשר:
1. אם הפרמטר above_avrage = Y אז להוסיף את התנאי שמשכורת העובד גדולה שווה לממוצע
2. הפרמטר YEAR מכיל שנה ב-4 ספרות. יש לשלוף רק עובדים שתאריך הקליטה שלהם גדול שווה
לשנה.
לכל רשומה שעונה על התנאי, יש לקרוא לפונקציה get_no_of_children בשביל לקבל את מספר הילדים.
את התוצאות יש להכניס לטבלה.


להלן הטבלאות שיצרתי לפני :
emp, אשר תכיל פרטי עובדים.
מבנה הטבלא: emp_no number ( מספר עובד )
emp_name varchar2(50) ( שם עובד )
hier_date date ( תאריך קליטה )
salary number ( משכורת )


emp_children, אשר תכיל פרטי ילדי העובדים.
מבנה הטבלא: child_no number ( מספר ילד )
emp_no number ( מספר עובד )
name_name varchar2(50) ( שם ילד )
birthdate date ( תאריך לידה )


emp_details.
מבנה הטבלא: emp_no number ( מספר עובד )
emp_name varchar2(50) ( שם עובד )
hier_date date ( תאריך קליטה )
salary number ( משכורת )
no_of_sons number ( מספר ילדים )


והפתרון שרשמתי :
http://paste.ofcode.org/q3KW2VTfUPSHUQ6cCXY6vb

השגיאות :

Errors: PACKAGE PKG_EMP
Line: 3 PLS-00103: Encountered the symbol "(" when expecting one of the following:

:= ) , default varying character large
The symbol ":=" was substituted for "(" to continue.

Line: 3 PLS-00103: Encountered the symbol "(" when expecting one of the following:

:= . ) , @ % default character
The symbol ":=" was substituted for "(" to continue.

Line: 6 PLS-00103: Encountered the symbol "CREATE"


עבדתי לפי המדריך :
https://www.tutorialspoint.com/plsql/plsql_procedures.htm


תודה מראש על העזרה


                                שתף        

  האשכול     מחבר     תאריך כתיבה     מספר  
  יש לך שגיאה בשם של המשתנה year הרבנית דוטנט 03.01.17 11:21 1
  שכחתי להוסיך שחסר לך ''/'' לאחר הגדרת ה package (בשורה 5) הרבנית דוטנט 03.01.17 11:35 2
  תיקנתי לך מיטוכונדריה  03.01.17 12:30 3
     איזה מלך אני מריץ ובודק , המון המון המון תודה.. Crazy Lion  03.01.17 19:02 4

       
הרבנית דוטנט
חבר מתאריך 10.3.16
21 הודעות
   11:21   03.01.17   
אל הפורום  
  1. יש לך שגיאה בשם של המשתנה year  
בתגובה להודעה מספר 0
 
   זו מילה שמורה ב oracle. תנסה להחליף ותראה אם עובד.


                                                         (ניהול: מחק תגובה)
הרבנית דוטנט
חבר מתאריך 10.3.16
21 הודעות
   11:35   03.01.17   
אל הפורום  
  2. שכחתי להוסיך שחסר לך ''/'' לאחר הגדרת ה package (בשורה 5)  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מיטוכונדריה  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 9.7.14
1692 הודעות, 3 פידבק, 2 נקודות
   12:30   03.01.17   
אל הפורום  
  3. תיקנתי לך  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 03.01.17 בשעה 12:34 בברכה, מיטוכונדריה
 
CREATE OR REPLACE PACKAGE PKG_EMP AS
FUNCTION get_no_of_children(emp_no number) return number ;
PROCEDURE get_emp_det(above_avrage char(1),year varchar(4)) ;
END PKG_EMP ;

CREATE OR REPLACE PACKAGE BODY PKG_EMP IS
function get_no_of_children(emp_no number) IS
a number(15);
BEGIN
select no_of_sons into a
from emp_details
where emp_details.emp_no = emp_no
return a
END;

Procedure get_emp_det(above_avrage char ,year varchar) IS
a number(15);
BEGIN
select AVG(emp.salary) into a
from emp
Y:= emp.salary
IF Y => a /*above_avrage*/ AND DATEPART(yyyy,emp.hier_date) >= year THEN
kids_no :=get_no_of_children() ;
insert into emp_details(emp_no,emp_name,hier_date,salary,no_of_sons)
values(emp.emp_no,emp.emp_name,emp.hier_date,kid_no);
END IF ;

END;

END PKG_EMP;
/
חייבים לשים SELECT INTO משתנה בתוך פרוצדורות .
בתוך הגדרת המשתנים ביצירת הפרוצדורה אין צורך לציין את גודלן


                                                         (ניהול: מחק תגובה)
Crazy Lion  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.7.02
16479 הודעות, 3 פידבק, 4 נקודות
   19:02   03.01.17   
אל הפורום  
  4. איזה מלך אני מריץ ובודק , המון המון המון תודה..  
בתגובה להודעה מספר 3
 
  


                                                         (ניהול: מחק תגובה)

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net