标签: plsql

在oracle中动态创建和执行sql命令

我正在上一个数据库类,在该类的实验部分的开头,我们通常必须删除之前创建的数据库中的所有表.我希望能够运行一个动态执行此操作的脚本,但似乎无法使其工作.这是我到目前为止的代码.

declare tname string(50);
cursor ctable is select table_name from user_tables;

begin
 open ctable;
 LOOP
   FETCH ctable into tname;
   if tname != ''  then
     execute immediate 'drop table ' || tname;
   END if;
   EXIT WHEN ctable%NOTFOUND;
 END LOOP;
 close ctable;
end;
Run Code Online (Sandbox Code Playgroud)

如果有人可以指出我正确的方向,我做错了什么会很好.谢谢.

sql oracle plsql dynamic-sql cursor

1
推荐指数
1
解决办法
1787
查看次数

to_date函数pl/sql

undefine dates

declare
  v_dateInput VARCHAR(10);
  v_dates DATE;
begin
  v_dateInput := &&dates;
  v_dates := to_date(v_dateInput,'dd-mm-yyyy');
  DBMS_OUTPUT.put_line(v_dates);
end;
Run Code Online (Sandbox Code Playgroud)

不确定为什么每当我运行此代码时,例如03-03-1990的输入,此错误就会显示出来.

Error report:
ORA-01847: day of month must be between 1 and last day of month
ORA-06512: at line 6
01847. 00000 -  "day of month must be between 1 and last day of month"
*Cause:    
*Action:
Run Code Online (Sandbox Code Playgroud)

oracle plsql plsqldeveloper

1
推荐指数
1
解决办法
2796
查看次数

FOR循环中的上限不会在循环中改变,为什么?

我试图改变For循环中上限的值,但循环运行直到在起始中定义的上限.

根据逻辑循环应该是无限的,因为v_num的值总是先于i,但循环执行三次.请解释

这是代码

    DECLARE
    v_num number:=3;
    BEGIN
        FOR i IN 1..v_num LOOP
           v_num:=v_num+1;
           DBMS_OUTPUT.PUT_LINE(i ||'  '||v_num);
     END LOOP;
    END;
Ouput Coming

    1  4
    2  5
    3  6
Run Code Online (Sandbox Code Playgroud)

plsql oracle9i plsqldeveloper

1
推荐指数
1
解决办法
246
查看次数

如何通过Oracle PL / SQL测试字符串是否在预定义字符串列表中

我定义了一个字符串列表,其中包含不同的国家/地区代码(如USA ,CHINA,HK,JPN等)。如何检查输入变量是否为列表中的国家/地区代码。我使用以下代码进行测试,但失败。

declare
 country_list  CONSTANT VARCHAR2(200) := USA,CHINA,HK,JPN;
 input VARCHAR2(200);
begin
 input  := 'JPN';
 IF input   IN  (country_list)
         DBMS_OUTPUT.PUT_LINE('It is Inside');
    else       
         DBMS_OUTPUT.PUT_LINE('It is not  Inside');
 END IF;
end;
Run Code Online (Sandbox Code Playgroud)

oracle plsql plsqldeveloper

1
推荐指数
1
解决办法
1万
查看次数

从PLSQL游标中获取两条记录

我的问题很简短.我创建了一个游标来从我的表中获取一些值.我想获取光标的当前记录(获取的记录)和光标中的下一条记录而不提取它,因为我想对当前记录和下一条记录进行计算.在传统的编程中,它是一个简单的操作; 你可以通过将它增加1来使用for index来实现.

你有什么建议吗?

plsql

1
推荐指数
1
解决办法
3772
查看次数

在oracle中解释FOR

我正在考试.我在行中进行了所有测试,所以我的行看起来像这样;

ID  |  TEST
----------------------------------
1   |  'select sysdate from dual'
2   |  'select sysdatesss from dual'
Run Code Online (Sandbox Code Playgroud)

现在我逐行阅读它,我需要测试它 EXPLAIN PLAN FOR

所以它将是第一排

EXPLAIN PLAN FOR select sysdate from dual
Run Code Online (Sandbox Code Playgroud)

但我在转换TEST领域时遇到了问题.现在我用;

EXPLAIN PLAN FOR testing.TEST
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

有任何想法吗?

sql oracle plsql dynamic-sql

1
推荐指数
1
解决办法
1114
查看次数

将insert语句用于一个过程!

我可以在一个过程中使用insert到表中(在oracle上)吗?例:

procedure my_procedure (aa1 number ,aa2 number ) is 

begin 
  insert into lam_table values(aa1,aa2,null) ;(*ofcourse depending on the tables )
  ...
  ...
end ;
Run Code Online (Sandbox Code Playgroud)

**注意我尝试了它并且它工作但底部有一条消息说(成功编译未修改)

sql oracle plsql stored-procedures

1
推荐指数
1
解决办法
226
查看次数

pl/sql中的错误处理

我想知道PL/SQL中的错误处理.有谁能帮我找到关于这个主题的简短描述?

oracle plsql exception-handling

1
推荐指数
1
解决办法
700
查看次数

将oracle查询转换为pl/sql中的用户定义类型

我在plsql过程中的关系表上有一个select查询.

我想将此查询的结果转换为用户定义的类型对象,以通过odp.net返回.

我该怎么做呢?

oracle plsql odp.net

1
推荐指数
1
解决办法
4388
查看次数

如何在Oracle中使用批量收集而不是循环

我在我的程序中有一个类似下面的示例查询:

result_rec              mypkg.mytype;

OPEN CUR1 FOR
  select col1, col2, col3 from table1 where something = 'a'; --rows will always be 50

      LOOP
         FETCH CUR1
          INTO myrectype;
         EXIT WHEN CUR1%NOTFOUND;
         result_rec.col1 := myrectype.col1;
         result_rec.col2 := myrectype.col2;
         result_rec.col3 := myrectype.col3;
         PIPE ROW (result_rec);
      END LOOP;
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,每次我循环50次.有一个更好的方法吗?像BULK COLLECT INTO这样的东西?我该如何实现呢?

oracle plsql

1
推荐指数
1
解决办法
1万
查看次数