程序中的Pl / Sql Oracle函数

时间:2015-05-14 03:11:35

标签: sql database oracle stored-procedures plsql

我需要制作一个需要更新学生情况的程序,但我需要使用一个返回' A'对于已批准的学生,以及' R'对于未经批准的。在此之后,我需要更新字段"情境"用' A'或者' R'从函数返回的。我已经有了这个功能,但我不知道如何制作这个程序。这里是函数的代码:

CREATE OR REPLACE FUNCTION check_grade(grade     IN NUMBER,
                                       frequency IN NUMBER) RETURN VARCHAR2 AS
   RESULT VARCHAR2(1) DEFAULT '';
BEGIN
   IF (grade >= 6) AND (frequency >= 0.75) THEN
      resultado := 'A';
   ELSE
      resultado := 'R';
   END IF;

   RETURN RESULT;
END;

2 个答案:

答案 0 :(得分:0)

看看是否有这个帮助。

create or replace procedure pr_update(v_grade in number, v_frequency in number) is
update tab_name set Situation=check_grade(v_grade,v_frequency);
end;

答案 1 :(得分:0)

我认为你过度复杂化了。您可以在纯 SQL 中执行此操作,而不是使用 PL / SQL 功能和过程。

您可以使用 CASE 表达式,例如:

测试1

SQL> SELECT
  2  CASE
  3      WHEN &grade   >=6
  4      AND &frequency>=0.75
  5      THEN 'A'
  6      ELSE 'R'
  7    END
  8    FROM DUAL;
Enter value for grade:   10
old   3:     WHEN &grade   >=6
new   3:     WHEN   10   >=6
Enter value for frequency: 1
old   4:     AND &frequency>=0.75
new   4:     AND 1>=0.75

C
-
A

测试2

SQL> SELECT
  2  CASE
  3      WHEN &grade   >=6
  4      AND &frequency>=0.75
  5      THEN 'A'
  6      ELSE 'R'
  7    END
  8    FROM DUAL;
Enter value for grade:   1
old   3:     WHEN &grade   >=6
new   3:     WHEN   1   >=6
Enter value for frequency: 0.5
old   4:     AND &frequency>=0.75
new   4:     AND 0.5>=0.75

C
-
R

因此,在 UPDATE 语句中使用相同的逻辑:

UPDATE table_name
SET situation = (
  CASE
    WHEN &grade   >=6
    AND &frequency>=0.75
    THEN 'A'
    ELSE 'R'
  END)
WHERE situation IS NOT NULL;

更新 OP只想在程序中执行此操作:

create or replace procedure pr_update
 is
begin
update table_name 
   set Situation = check_grade(grade, frequency);
end;
/

在上面的过程中,将实际的table_name放在update语句中。等级和频率被视为表格的列名。