你能用oraclesql中的函数作为dml吗?

rekjcdws  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(236)

所以我得到了一个任务来执行下面的任务。

  1. Create a simple program to demonstrate the use of stored functions for
  2. a) Retrieving formatted information by giving the employee id.
  3. b) Performing DML commands (Insert, Update and Delete)
  4. c) Checking palindrome String

使用下表

  1. SQL> desc Employee01;
  2. Name Null? Type
  3. ----------------------------------------- -------- ----------------------------
  4. EMPNO NOT NULL NUMBER(38)
  5. ENAME NOT NULL VARCHAR2(20)
  6. DEPTNO NOT NULL VARCHAR2(5)
  7. JOB VARCHAR2(20)
  8. HIREDDATE DATE
  9. SALARY NUMBER(38)

我已经做了前两个,但回文的一个我不知道如何开始。我们将不胜感激。
编辑:在dml回文代码中获得帮助

  1. CREATE OR REPLACE FUNCTION FPal(
  2. str VARCHAR2)
  3. RETURN VARCHAR2
  4. IS
  5. l VARCHAR2;
  6. t VARCHAR2;
  7. res VARCHAR2 (130);
  8. BEGIN
  9. FOR i IN REVERSE 1..Length(s) LOOP
  10. l := Substr(str, i, 1);
  11. t := t
  12. ||''
  13. ||l;
  14. END LOOP;
  15. IF t = str THEN
  16. dbms_output.Put_line(t
  17. ||''
  18. ||' is palindrome');
  19. ELSE
  20. dbms_output.Put_line(t
  21. ||''
  22. ||' is not palindrome');
  23. END IF;
  24. RETURN (res);
  25. END FPal;
  26. /
nc1teljy

nc1teljy1#

下面是一个可能的固定函数:

  1. SQL> set serveroutput on
  2. SQL> CREATE OR REPLACE FUNCTION FPal(
  3. 2 str VARCHAR2)
  4. 3 RETURN VARCHAR2
  5. 4 IS
  6. 5 l CHAR;
  7. 6 t VARCHAR2(128);
  8. 7 BEGIN
  9. 8 FOR i IN REVERSE 1..Length(str) LOOP
  10. 9 l := Substr(str, i, 1);
  11. 10 t := t || l;
  12. 11 END LOOP;
  13. 12
  14. 13 IF t = str THEN
  15. 14 dbms_output.Put_line(t ||' is palindrome');
  16. 15 return 'TRUE';
  17. 16 ELSE
  18. 17 dbms_output.Put_line(t ||' is not palindrome');
  19. 18 return 'FALSE';
  20. 19 END IF;
  21. 20 END FPal;
  22. 21 /
  23. Function created.
  24. SQL> show errors
  25. No errors.

测试:

  1. SQL> select fpal('ABBA') from dual;
  2. FPAL('ABBA')
  3. --------------------------------------------------------------------------------
  4. TRUE
  5. ABBA is palindrome
  6. SQL> select fpal('BABA') from dual;
  7. FPAL('BABA')
  8. --------------------------------------------------------------------------------
  9. FALSE
  10. ABAB is not palindrome
  11. SQL>
展开查看全部
6uxekuva

6uxekuva2#

另一种方法:将输入字符串拆分成行,然后向后合并。比较这两个值并决定。

  1. SQL> create or replace function f_pal (par_val in varchar2) return varchar2 is
  2. 2 l_val varchar2(200) := replace(par_val, ' ', '');
  3. 3 l_rev varchar2(200);
  4. 4 begin
  5. 5 select listagg(regexp_substr(l_val, '[^.]', 1, level), '')
  6. 6 within group (order by level desc)
  7. 7 into l_rev
  8. 8 from dual
  9. 9 connect by level <= length(l_val);
  10. 10
  11. 11 return 'palindrome: ' || case when l_rev = l_val then 'YES'
  12. 12 else 'NO'
  13. 13 end;
  14. 14 end;
  15. 15 /
  16. Function created.

测试:

  1. SQL> with
  2. 2 test (col) as
  3. 3 (select 'little' from dual union all
  4. 4 select 'radar' from dual union all
  5. 5 select '12321' from dual union all
  6. 6 select 'ana voli milovana' from dual
  7. 7 )
  8. 8 select col, f_pal(col) result
  9. 9 from test;
  10. COL RESULT
  11. ----------------- ------------------------------
  12. little palindrome: NO
  13. radar palindrome: YES
  14. 12321 palindrome: YES
  15. ana voli milovana palindrome: YES
  16. SQL>
展开查看全部

相关问题