我正在上一个数据库类,在该类的实验部分的开头,我们通常必须删除之前创建的数据库中的所有表.我希望能够运行一个动态执行此操作的脚本,但似乎无法使其工作.这是我到目前为止的代码.
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)
如果有人可以指出我正确的方向,我做错了什么会很好.谢谢.
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) 我试图改变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) 我定义了一个字符串列表,其中包含不同的国家/地区代码(如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) 我的问题很简短.我创建了一个游标来从我的表中获取一些值.我想获取光标的当前记录(获取的记录)和光标中的下一条记录而不提取它,因为我想对当前记录和下一条记录进行计算.在传统的编程中,它是一个简单的操作; 你可以通过将它增加1来使用for index来实现.
你有什么建议吗?
我正在考试.我在行中进行了所有测试,所以我的行看起来像这样;
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)
但它不起作用.
有任何想法吗?
我可以在一个过程中使用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)
**注意我尝试了它并且它工作但底部有一条消息说(成功编译未修改)
我在plsql过程中的关系表上有一个select查询.
我想将此查询的结果转换为用户定义的类型对象,以通过odp.net返回.
我该怎么做呢?
我在我的程序中有一个类似下面的示例查询:
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这样的东西?我该如何实现呢?