Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.97/109: Рейтинг темы: голосов - 109, средняя оценка - 4.97
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
1

Хранимые процедуры и функции

20.11.2009, 13:07. Показов 20806. Ответов 7
Метки нет (Все метки)

Ребята, дайте пожалуйста 1 пример, как описывать хранимую процедуру, и 1 пример, как описывать хранимую функцию, очень нужно. Именно на Оракл. Не могу найти, всё что пробую из найденного, ничего не срабатывает. Заранее благодарю.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2009, 13:07
Ответы с готовыми решениями:

Oracle и хранимые процедуры !
Здравствуйте ! У меня следующая проблема - пишу хранимую процедуру в MSSQL тело которой...

Хранимые процедуры: как проверить правильность выполнения в sqldeveloper?
Нашел код, как проверить правильность его выполнения в sqldeveloper? Какую команду добавить? начал...

Oracle-9 хранимые процедуры, триггеры и ODBC + обратная связь
Есть оракловый сервак, есть приложение на CV++ юзающее через ODBC эту базу. Надо реаализовать...

Хранимые процедуры - определить, сколько раз будет выполняться код
Здравствуйте, у меня есть вопрос по хранимым процедурам, а конкретнее про оператора цикла LOOP из...

7
10023 / 2612 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
20.11.2009, 13:32 2
Создание хранимой процедуры - SQL
Создание хранимой процедуры Oracle PL/SQL, команда CREATE PROCEDURE, вызов хранимой процедуры

Код на создание хранимой процедуры может быть таким:

T-SQL
1
2
3
4
5
6
7
create procedure pSalary(emp_id number, nSalary number) AS
 
BEGIN
 
update hr.employees set salary = nSalary where employee_id = emp_id;
 
END;
Код для вызова этой хранимой процедуры может выглядеть так:

T-SQL
1
2
3
4
5
begin
 
pSalary(100, 25000);
 
end;


я еще читал, что можно на Яве (Java) хранимые процедуры писать...

Добавлено через 16 минут
а вот про создание хранимы процедур и функций из базы
Creating a Stored Procedure or Function in an Oracle Database
A stored procedure or function can be created with no parameters, IN parameters, OUT parameters, or IN/OUT parameters. There can be many parameters per stored procedure or function.

An IN parameter is a parameter whose value is passed into a stored procedure/function module. The value of an IN parameter is a constant; it can't be changed or reassigned within the module.

An OUT parameter is a parameter whose value is passed out of the stored procedure/function module, back to the calling PL/SQL block. An OUT parameter must be a variable, not a constant. It can be found only on the left-hand side of an assignment in the module. You cannot assign a default value to an OUT parameter outside of the module's body. In other words, an OUT parameter behaves like an uninitialized variable.

An IN/OUT parameter is a parameter that functions as an IN or an OUT parameter or both. The value of the IN/OUT parameter is passed into the stored procedure/function and a new value can be assigned to the parameter and passed out of the module. An IN/OUT parameter must be a variable, not a constant. However, it can be found on both sides of an assignment. In other words, an IN/OUT parameter behaves like an initialized variable.

This example creates stored procedures and functions demonstrating each type of parameter.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
    try {
        // To create a connection to an Oracle database,
        // see e235 Connecting to an Oracle Database
        Statement stmt = connection.createStatement();
    
        // Create procedure myproc with no parameters
        String procedure =
            "CREATE OR REPLACE PROCEDURE myproc IS "
            + "BEGIN "
            + "INSERT INTO oracle_table VALUES('string 1'); "
            + "END;";
        stmt.executeUpdate(procedure);
    
        // Create procedure myprocin with an IN parameter named x.
        // IN is the default mode for parameter, so both `x VARCHAR' and `x IN VARCHAR' are valid
        procedure =
            "CREATE OR REPLACE PROCEDURE myprocin(x VARCHAR) IS "
            + "BEGIN "
            + "INSERT INTO oracle_table VALUES(x); "
            + "END;";
        stmt.executeUpdate(procedure);
    
        // Create procedure myprocout with an OUT parameter named x
        procedure =
            "CREATE OR REPLACE PROCEDURE myprocout(x OUT VARCHAR) IS "
            + "BEGIN "
            + "INSERT INTO oracle_table VALUES('string 2'); "
            + "x := 'outvalue'; " // Assign a value to x
            + "END;";
        stmt.executeUpdate(procedure);
    
        // Create procedure myprocinout with an IN/OUT parameter named x;
        // x functions as an IN parameter and also as an OUT parameter
        procedure =
            "CREATE OR REPLACE PROCEDURE myprocinout(x IN OUT VARCHAR) IS "
            + "BEGIN "
            + "INSERT INTO oracle_table VALUES(x); " // Use x as IN parameter
            + "x := 'outvalue'; "                    // Use x as OUT parameter
            + "END;";
        stmt.executeUpdate(procedure);
    
        // Create a function named myfunc which returns a VARCHAR value;
        // the function has no parameter
        String function =
            "CREATE OR REPLACE FUNCTION myfunc RETURN VARCHAR IS "
            + "BEGIN "
            + "RETURN 'a returned string'; "
            + "END;";
        stmt.executeUpdate(function);
    
        // Create a function named myfuncin which returns a VARCHAR value;
        // the function has an IN parameter named x
        function =
            "CREATE OR REPLACE FUNCTION myfuncin(x VARCHAR) RETURN VARCHAR IS "
            + "BEGIN "
            + "RETURN 'a return string'||x; "
            + "END;";
        stmt.executeUpdate(function);
    
        // Create a function named myfuncout which returns a VARCHAR value;
        // the function has an OUT parameter named x whose value is
        // returned to the calling PL/SQL block when the execution of the function ends
        function =
            "CREATE OR REPLACE FUNCTION myfuncout(x OUT VARCHAR) RETURN VARCHAR IS "
            + "BEGIN "
            + "x:= 'outvalue'; "
            + "RETURN 'a returned string'; "
            + "END;";
        stmt.executeUpdate(function);
    
        // Create a function named myfuncinout that returns a VARCHAR value;
        // the function has an IN/OUT parameter named x.  As an IN parameter, the value of x is
        // defined in the calling PL/SQL block before it is passed in eyfuncinout
        // function.  As an OUT parameter, the new value of x, `x value||outvalue', is also
        // returned to the calling PL/SQL block when the execution of the function ends.
        function =
            "CREATE OR REPLACE FUNCTION myfuncinout(x IN OUT VARCHAR) RETURN VARCHAR IS "
            + "BEGIN "
            + "x:= x||'outvalue'; "
            + "RETURN 'a returned string'; "
            + "END;";
        stmt.executeUpdate(function);
    } catch (SQLException e) {
    }
http://www.exampledepot.com/eg... ction.html
2
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
20.11.2009, 14:46  [ТС] 3
А такой же самы пример, который в вкладке "Создание хранимой процедуры - SQL", сделайте пожалуйста для хранимой функции? Благодарю заранее.
1
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
21.11.2009, 17:06  [ТС] 4
Вот пробую пример по функциям, вот такая функция преобразования BOOLEAN типа в тип VARCHAR2
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE OR REPLACE FUNCTION BOOL_TO_CHAR(INBL IN BOOLEAN) RETURN VARCHAR2
IS
 
OUT_ST VARCHAR2(5);
 
BEGIN
 
    IF (INBL) THEN
    OUT_ST := 'TRUE';
    ELSIF (NOT INBL) THEN
    OUT_ST := 'FALSE';
    ELSE 
    OUT_ST := 'NULL';
    END IF;
 
    RETURN(OUT_ST);
 
END BOOL_TO_CHAR;
/
Функция создаётся, но, при вызове её, вот так:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
SET SERVEROUTPUT ON
 
DECLARE
 
BEGIN
 
    DBMS_OUTPUT.enable;
    DBMS_OUTPUT.put_line(BOOL_TO_CHAR(TRUE));
    DBMS_OUTPUT.put_line(BOOL_TO_CHAR(FALSE));
    DBMS_OUTPUT.put_line(BOOL_TO_CHAR(NULL));
    
END;
/
Не вызывается.
0
10023 / 2612 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
21.11.2009, 21:41 5
я оракла не знаю , но имхо при вызове значение функции надо кудато возвращать, т.е. присваивать какойто переменной, или заносить в какуюто выборку
0
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
22.11.2009, 14:32  [ТС] 6
Я читаю по книжному примеру, делаю как там написанно, но этот вызов не срабатывает. Там написанно именно такой вызов.

Добавлено через 14 минут
пример написан здесь http://www.firststeps.ru/sql/oracle/r.php?88
0
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
22.11.2009, 14:47  [ТС] 7
Вот фото.
Миниатюры
Хранимые процедуры и функции  
0
11 / 11 / 2
Регистрация: 25.05.2009
Сообщений: 435
22.11.2009, 15:19  [ТС] 8
Извиняюсь, не ту картинку вставил, вот картинка проавильная.
Миниатюры
Хранимые процедуры и функции  
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.11.2009, 15:19

Хранимые процедуры - вывести список книг, которые брал читатель
По введенной фамилии хочу что бы вывелись книги которые он брал. Написал следующий запрос и...

хранимые функции
Задание Создание функции GET_ANNUAL_COMP, вычисляющей годовой доход сотрудника на основе заданных...

Какие процедуры и функции вызываются из заданной процедуры
Подскажите, каким образом, используя сведения из представлений словаря данных, получить информацию...

Хранимые процедуры на чтение и запись
Простая идея: работать с БД только через хранимые процедуры (естественно: получение и изменение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru