Advertisement
Guest User

lab3

a guest
Mar 24th, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 6.46 KB | None | 0 0
  1. CREATE TABLE  temp_table (
  2. num_col     NUMBER,
  3. char_col      VARCHAR2(250));
  4.  
  5. DECLARE
  6. /* Объявляем переменные, используемые в этом блоке. */
  7. v_Num1 NUMBER := 1;
  8. v_String1 VARCHAR2(50) := 'Hello World!';
  9. BEGIN
  10. /* Используя значения переменных, введем  строку в таблицу temp_table. */
  11. INSERT INTO temp_table (num_col, char_col)  VALUES (v_Num1, v_String1);
  12. END;
  13. /
  14.  
  15. CREATE OR REPLACE PROCEDURE InsertlntoTemp AS
  16. /* Объявляем переменные, используемые в этом блоке. */
  17. v_Num1 NUMBER := 1;
  18. v_String1 VARCHAR2(50) := 'Hello World!';
  19. BEGIN
  20. /* Используя значения переменных, введем  строку в таблицу temp_table. */
  21. INSERT INTO temp_table (num_col, char_col)  VALUES (v_Num1, v_String1);
  22. END InsertlntoTemp;
  23. /
  24.  
  25. BEGIN
  26.       InsertlntoTemp;
  27. END;
  28. /
  29.  
  30. DECLARE
  31. v_Description VARCHAR2(50);
  32. v_NuinberSeats NUMBER := 45;
  33.         v_Counter BINARY_INTEGER := 0;
  34.  
  35. DECLARE
  36.     v_String1 VARCHAR2(10);
  37.     v_String2 VARCHAR2(15);
  38.     v_Numeric NUMBER;
  39. BEGIN
  40.     v_String1 := 'Hello';
  41.     v_Strlng2 := v_String1;
  42.     v_Numeric := -12.4;
  43. END;
  44. /
  45.  
  46. DECLARE
  47. v_TempVar   VARCHAR2(10) := 'PL';
  48. v_Result        VARCHAR2(20);
  49. BEGIN
  50. v_Result := v_TempVar
  51. END;
  52. /
  53.  
  54. DECLARE
  55. v_Number NUMBER;
  56. v_Comment VARCHAR2(35);
  57. BEGIN
  58. /* Извлекаем количество записей в temp_table.
  59. Сохраняем результат в v_Number. */
  60. SELECT COUNT(*) INTO v_Number FROM temp_table;
  61. IF v_Number < 50 THEN
  62.    v_Comment := 'Меньше 50';
  63. ELSIF v_Number < 100 THEN
  64.    v_Comment := 'Меньше 100';
  65. ELSE
  66.    v_Comment := 'Больше 100';
  67. END IF;
  68. END;
  69. /
  70.  
  71. DECLARE
  72.     v_Counter BINARY_INTEGER := 1;
  73. BEGIN
  74.     LOOP
  75.     /* Введем в таблицу temp_table строку с текущим значением
  76.     счетчика цикла.*/
  77.         INSERT INTO temp_table
  78.         VALUES (v_Counter, 'LOOP index');
  79.         v_Counter := v_Counter + 1;
  80.     -- Условие выхода: когда счетчик цикьс: станет > 50, цикл будет завершен.
  81.         IF v_Counter > 50 THEN EXIT; END IF;
  82.     END LOOP;
  83. END;
  84.  
  85.  
  86. DECLARE
  87.     v_Counter BINARY_INTEGER := 1;
  88. BEGIN
  89. /* Проверяем счетчик цикла перед каждой итерацией - на предмет того, что значение счетчика меньше 50.*/
  90.     WHILE v_Counter <= 50 LOOP
  91.         INSERT INTO temp_table
  92.         VALUES (v_Counter, 'Loop index');
  93.         v_Counter ;= v_Counter + 1;
  94.     END LOOP;
  95. END;
  96.  
  97. BEGIN
  98.     FOR v_Counter IN 1..50 LOOP
  99.         INSERT INTO temp_table
  100.         VALUES (v_Counter, 'Loop Index');
  101.     END LOOP;
  102. END;
  103.  
  104. CREATЕ TABLE students (
  105. Id NUMBER,
  106. first_name VARCHAR2(50),
  107. last_name VARCHAR2(50),
  108. major VARCHAR2(10));
  109.  
  110. INSERT INTO students (ID, FIRST_NAME, LAST_NAME, MAJOR) VALUES (1, ‘Николай’, ‘Сидоров’, ‘Информатика’);
  111. INSERT INTO students (ID, FIRST_NAME, LAST_NAME, MAJOR) VALUES (2, ‘Петр’, ‘Иванов’, ‘Ин. язык’);
  112. INSERT INTO students (ID, FIRST_NAME, LAST_NAME, MAJOR) VALUES (3, ‘Михаил’, ‘Петров’, ‘Информатика’);
  113.  
  114. CREATЕ SEQUENCE  student_sequence;
  115.  
  116. COMMIT;
  117.  
  118. //
  119.  
  120. DECLARE
  121.     /* Выходные переменные для хранения результатов запроса */
  122.     v_StudentID students.id%TYPE;
  123.     v_FirstName students.first_name%TYPE;
  124.     v_LastName students.last_name%TYPE;
  125.     /* Переменная привязки, используемая в запросе */
  126.     v_Major students.major%TYPE := 'Информатика';
  127.     /* Объявление курсора */
  128.     CURSOR c_Students IS SELECT id, first_name, last_name FROM students WHERE major = v_Major;
  129. BEGIN
  130.     /* Идентифицируем строки активного набора и подготовимся к дальнейшей
  131.     обработке данных */
  132.     OPEN c_Students;
  133.     LOOP
  134.     /* Извлечем каждую строку активного набора в переменные PL/SQL */
  135.     FETCH c_Students INTO v_StudentID, v_FirstName, v_LastName;
  136.     /* Если строки, которые нужно извлечь, закончились, выходим из цикла */
  137.     EXIT WHEN c_Students%NOTFOUND;
  138.     END LOOP;
  139.     /* Освободим ресурсы, используемые запросом */
  140.     CLOSE c_Students;
  141. END;
  142.  
  143. //
  144.  
  145. CREATE OR REPLACE PROCEDURE AddNewStudent (
  146.   p_FirstName students.first_name%TYPE,
  147.   p_LastName students.last_name%TYPE,
  148. p_Major students.major%TYPE) AS
  149. BEGIN
  150. /* Внесем новую строку в таблицу students. Воспользуемся последовательностью studet_sequence для генерации идентификатора нового студента*/
  151. INSERT INTO students (ID, first_name, last_name, major) VALUES (student_sequence.NEXTVAL, p_FirstName, p_LastName, p_Major);
  152. END AddNewStudent;
  153. /
  154.  
  155. BEGIN
  156.    AddNewStudent('Василий', 'Николаев', 'Информатика');
  157. END;
  158. /
  159.  
  160. CREATE OR REPLACE FUNCTION CountStudents  RETURN NUMBER IS v_Students  NUMBER;
  161. BEGIN
  162. -- Получим текущее и максимальное число студентов в группе.
  163. SELECT COUNT(*) INTO v_Students FROM students;
  164. RETURN v_Students;
  165. END CountStudents;
  166. /
  167. SELECT CountStudents  FROM dual;
  168. ///
  169.  
  170. CREATE OR REPLACE PACKAGE StudPackage AS
  171.   --Добавляет нового студента.
  172. PROCEDURE AddNewStudent ( p_FirstName students.first_name%TYPE,  p_LastName students.last_name%TYPE,  p_Major students.major%TYPE);
  173. -- Удаляет указанного студента
  174. PROCEDURE RemoveStudent( p_StudetitID IN students. id%TYPE);
  175. END StudPackage;
  176. /
  177.  
  178. CREATE OR REPLACE PACKAGE BODY StudPackage  AS
  179.  
  180. -- Добавляет нового студента.
  181. PROCEDURE AddNewStudent ( p_FirstName students.first_name%TYPE,  p_LastName students.last_name%TYPE,  p_Major students.major%TYPE) AS
  182. BEGIN
  183.    /* Внесем новую строку в таблицу students. */
  184.    INSERT INTO students (ID, first_name, last_name, major) VALUES (student_sequence.NEXTVAL,       p_FirstName, p_LastName, p_Major);
  185. END AddNewStudent;
  186. -- Удаляет указанного студента
  187. PROCEDURE RemoveStudent( p_StudetitID IN students. id%TYPE) IS
  188. BEGIN
  189.     DELETE FROM students WHERE student_id = p_StudentID;
  190. END RemoveStudent;
  191. END StudPackage;
  192. /
  193.  
  194. BEGIN
  195.    StudPackage.RemoveStudent(1);
  196. END;
  197. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement