如何使用plsql developer

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用plsql developer相关的知识,希望对你有一定的参考价值。

参考技术A 1、首先plsql developer连接小编这里就不做介绍了大家不知道可以看看这篇文章:foview/Article_74137.html
2、登陆成功后即可进入对象浏览器窗口界面

3、在对象浏览器选择“my object”,这里边就是SCOTT(当前登陆的用户的所有object)

4、找到table文件夹,里边就是当前账户的所有表格

5、选中需要查看的表——》右键——》选中“查询数据”【query data】,即可看到数据了

6、新建——》选中sql window,即可打开sql窗口了

7、在sql窗口内输入sql语句,全选,点击执行即可查看到结果,功能很强大

8、选中表——》右键——》Edit(编辑),可以对表进行编辑。

如何在 Oracle SQL Developer 的存储过程中将表名列表作为参数传递?如何使用 PLSQL VARRAY 或嵌套表?

【中文标题】如何在 Oracle SQL Developer 的存储过程中将表名列表作为参数传递?如何使用 PLSQL VARRAY 或嵌套表?【英文标题】:How to pass list of table names as parameter in stored procedure in Oracle SQL Developer? How to use PLSQL VARRAY or nested table? 【发布时间】:2020-11-14 14:03:00 【问题描述】:

我有一个代码,它接受一个表名作为参数,并在该表名上为分区创建子分区。我的表按源系统代码列表进行分区,并且范围按月进行子分区。

问题:如果假设我有可变的表列表并且我想为所有表创建子分区,那么我需要每次修改此过程以传递不同的表列表。 我可以使用 PLSQL VARRAY 或嵌套表来保存我的表列表,并将这个 VARRAY 或嵌套表作为参数传递给下面的过程,并为 VARRAY 或嵌套表所持有的所有表名创建子分区吗?

非常感谢您的帮助。非常感谢!

代码:

CREATE OR REPLACE PROCEDURE execute_subpartition ( table_name IN varchar2)

IS
 tbl_nm varchar2(30) := table_name;
 sqlstr VARCHAR2(1000);

  CURSOR TabSubPartition IS
  SELECT TABLE_NAME, PARTITION_NAME
  FROM USER_TAB_PARTITIONS
  WHERE TABLE_NAME = tbl_nm
  ORDER BY PARTITION_NAME;
BEGIN
     FOR aSubPart IN TabSubPartition LOOP
       IF TRUNC(LAST_DAY(SYSDATE)) = TRUNC(SYSDATE)
        sqlstr := 'ALTER TABLE TUCEL001.' || aSubPart.TABLE_NAME || ' MODIFY PARTITION ' || 
     aSubPart.PARTITION_NAME ||' ADD SUBPARTITION '  || aSubPart.PARTITION_NAME || '_' || 
     TO_CHAR(TRUNC(LAST_DAY(SYSDATE) + 1), 'MON_YYYY') ||' VALUES LESS THAN (TIMESTAMP ''' || 
     TRIM(to_char(add_months((TRUNC(LAST_DAY(SYSDATE))+1), 1), 'SYYYY-MM-DD HH24:MI:SS', 
     'NLS_CALENDAR=GREGORIAN')) || ''')'; 
     dbms_output.put_line(sqlstr);
     EXECUTE IMMEDIATE sqlstr;
  
    ELSE
          dbms_output.put_line('the condition did not match');
    END IF;
  END LOOP;
Exception
   WHEN OTHERS
   THEN
 dbms_output.put_line('encountered an error, because the sub-partitions which are being created 
  already exists');
END;

【问题讨论】:

【参考方案1】:

我的 11g 没有启用分区,所以无法演示。

但是,看看这个例子(创建一些表)是否有帮助。您不必声明自己的类型 - sys.odcivarchar2list 应该这样做。使用table 函数读取它并在动态SQL 中使用它的column_value

程序:

SQL> create or replace procedure p_test (par_tables in sys.odcivarchar2list) as
  2    l_str varchar2(200);
  3  begin
  4    for cur_r in (select column_value as table_name
  5                  from table(par_tables)
  6                 )
  7    loop
  8      dbms_output.put_line('table name = ' || cur_r.table_name);
  9      l_str := 'create table ' || dbms_assert.qualified_sql_name(cur_r.table_name) ||
 10               '  (id     number,' ||
 11               '   name   varchar2(20))';
 12      execute immediate(l_str);
 13    end loop;
 14  end;
 15  /

Procedure created.

测试:

SQL> exec p_test(sys.odcivarchar2list('tab_a', 'tab_b'));

PL/SQL procedure successfully completed.

SQL> desc tab_a;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER
 NAME                                               VARCHAR2(20)

SQL> desc tab_b;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER
 NAME                                               VARCHAR2(20)

SQL>

【讨论】:

我无法理解如何使用上述示例作为我的查询的解决方案。 :( 在我上面的过程中,我想传递一个表名列表作为参数,它再次在过程中的 select 语句的 where 子句中处理以获取某些记录。此外,我需要筛选所有给定记录的两列值,并使用这些值创建子分区。 和我一样;您将编写自己的动态 SQL 来完成工作的 分区 部分。我不能,我的数据库不支持分区。除此之外,应该没问题。 很抱歉,我不明白您的问题是什么。我清楚地展示了如何传递表列表以及如何在 WHERE 子句中使用它。你没看到吗?也许你不喜欢它,但这是一个不同的问题。 非常感谢您的上述示例,我能够利用类似的功能并获得所需的结果。除了上面我在存储过程中使用了 pl/sql 嵌套游标 FOR 循环。

以上是关于如何使用plsql developer的主要内容,如果未能解决你的问题,请参考以下文章

如何使用PLSQL Developer从Oracle UTF8数据库中读取汉字

如何在 Oracle SQL Developer 的存储过程中将表名列表作为参数传递?如何使用 PLSQL VARRAY 或嵌套表?

plsql developer怎么使用

plsql developer如何导出数据库,不是导出表!

如何安装pl/sql developer

plsql Developer11的工具栏没有了如何找回来