标签: plsql

oracle中的MODIFY COLUMN - 如何在设置为nullable之前检查列是否可以为空?

我正在努力为同事做一些Oracle工作,并陷入困境.在尝试编写脚本以将列修改为可为空时,我遇到了可爱的ORA-01451错误:

ORA-01451: column to be modified to NULL cannot be modified to NULL
Run Code Online (Sandbox Code Playgroud)

发生这种情况是因为列已经是NULL.我们有几个需要更新的数据库,所以在我错误的假设中,我认为将其设置为NULL应该全面工作以确保每个人都是最新的,无论他们是否已将此列手动设置为可为空.但是,对于已经将列作为可空的一些人来说,这显然会导致错误.

如何检查列是否已经可以为空以避免错误?能够实现这个想法的东西:

IF( MyTable.MyColumn IS NOT NULLABLE)
   ALTER TABLE MyTable MODIFY(MyColumn  NULL);
Run Code Online (Sandbox Code Playgroud)

database oracle schema plsql

35
推荐指数
2
解决办法
8万
查看次数

检查Oracle中的"它是否为数字"功能

我正在尝试检查oracle(10g)查询中的列中的值是否为数字以便进行比较.就像是:

select case when ( is_number(myTable.id) and (myTable.id >0) ) 
            then 'Is a number greater than 0' 
            else 'it is not a number' 
       end as valuetype  
  from table myTable
Run Code Online (Sandbox Code Playgroud)

关于如何检查的任何想法?

oracle plsql oracle10g

35
推荐指数
5
解决办法
18万
查看次数

获取架构中所有表的计数

我试图获取模式中所有表的记录计数.我在编写PL/SQL时遇到问题.这是我到目前为止所做的,但我遇到了错误.请建议任何更改:

DECLARE
v_owner varchar2(40);
v_table_name varchar2(40);

cursor get_tables is
select distinct table_name,user
from user_tables
where lower(user) = 'SCHEMA_NAME';


begin

open get_tables;
fetch get_tables into v_table_name,v_owner;

    INSERT INTO STATS_TABLE(TABLE_NAME,SCHEMA_NAME,RECORD_COUNT,CREATED)
    SELECT v_table_name,v_owner,COUNT(*),TO_DATE(SYSDATE,'DD-MON-YY') FROM         v_table_name;

CLOSE get_tables;

END;
Run Code Online (Sandbox Code Playgroud)

oracle plsql

35
推荐指数
4
解决办法
9万
查看次数

Oracle Pl/SQL:循环遍历XMLTYPE节点

我有一个XMLTYPE,其中包含以下内容:

<?xml version="1.0"?>
    <users>
        <user>
            <name>user1</name>
        </user>
        <user>
            <name>user2</name>
        </user>
        <user>
            <name>user3</name>
        </user>
    </users>
Run Code Online (Sandbox Code Playgroud)

如何通过所有元素"user"循环PL/SQL?谢谢

xml oracle plsql xmltype

34
推荐指数
3
解决办法
6万
查看次数

"%Type"在Oracle sql中的含义是什么?

我第一次体验Oracle和TOAD(我知道SSMS).我在更新过程中的输入参数旁边遇到了这个"%Type",我不知道它是什么或它意味着什么.我在Google上找到了与"%Rowtype"相关的链接.是同一件事还是完全不同的事情?

如果这很模糊,我道歉.一如既往,感谢您的帮助.

sql oracle plsql

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

在Oracle中,是否可以通过视图插入或更新记录?

在Oracle中,是否可以通过视图插入或更新记录(一行)?

sql oracle plsql views

33
推荐指数
3
解决办法
11万
查看次数

PL/SQL打印出存储过程返回的引用游标

如何从存储过程(OUT变量)返回的引用游标中获取并将结果行打印到SQL*PLUS中的STDOUT?

ORACLE存储过程:

PROCEDURE GetGrantListByPI(p_firstname IN VARCHAR2, p_lastname IN VARCHAR2,
p_orderby IN VARCHAR2, p_cursor OUT grantcur);
Run Code Online (Sandbox Code Playgroud)

PL/SQL:

SET SERVEROUTPUT ON;

DECLARE
  TYPE r_cursor IS REF CURSOR;
  refCursor r_cursor;

  CURSOR grantCursor IS
    SELECT last_name, first_name
    FROM ten_year_pis
    WHERE year_added = 2010;

  last_name VARCHAR2(100);
  first_name VARCHAR2(100);

BEGIN
  OPEN grantCursor;
  FETCH grantCursor INTO last_name, first_name;

  WHILE grantCursor%FOUND LOOP
    PMAWEB_PKG.GetGrantListByPI(last_name, first_name, 'last_name', refCursor);

    --HOW DO I LOOP THROUGH THE RETURNED REF CURSOR (refCursor)
    --AND PRINT THE RESULTING ROWS TO STDOUT?

    FETCH grantCursor into last_name, first_name; …
Run Code Online (Sandbox Code Playgroud)

oracle plsql ref cursor

33
推荐指数
4
解决办法
12万
查看次数

自引用表(Oracle)上的SQL递归查询

让我们假设我有这样的样本数据:

| Name     | ID | PARENT_ID |
-----------------------------
| a1       | 1  | null      |
| b2       | 2  | null      |
| c3       | 3  | null      |
| a1.d4    | 4  | 1         |
| a1.e5    | 5  | 1         |
| a1.d4.f6 | 6  | 4         |
| a1.d4.g7 | 7  | 4         |
| a1.e5.h8 | 8  | 5         |
| a2.i9    | 9  | 2         |
| a2.i9.j10| 10 | 9         |
Run Code Online (Sandbox Code Playgroud)

我想从accountId = …

sql database oracle plsql hierarchical-data

32
推荐指数
3
解决办法
10万
查看次数

删除Oracle中的所有用户表/序列

作为构建过程和不断发展的数据库的一部分,我正在尝试创建一个脚本,该脚本将删除用户的所有表和序列.我不想重新创建用户,因为这将需要比允许更多的权限.

我的脚本创建了一个删除表/序列的过程,执行过程,然后删除过程.我正在从sqlplus执行该文件:

drop.sql中:


create or replace procedure drop_all_cdi_tables
is
cur integer;
begin
cur:= dbms_sql.OPEN_CURSOR();
for t in (select table_name from user_tables) loop
execute immediate 'drop table ' ||t.table_name|| ' cascade constraints';
end loop;
dbms_sql.close_cursor(cur);

cur:= dbms_sql.OPEN_CURSOR();
for t in (select sequence_name from user_sequences) loop
execute immediate 'drop sequence ' ||t.sequence_name;
end loop;
dbms_sql.close_cursor(cur);
end;
/
execute drop_all_cdi_tables;
/
drop procedure drop_all_cdi_tables;
/
Run Code Online (Sandbox Code Playgroud)

不幸的是,丢弃该过程会导致问题.似乎导致竞争条件,并且程序在执行之前被删除.
例如:

 SQL*Plus: Release 11.1.0.7.0 - Production on Tue Mar 30 18:45:42 2010

 Copyright (c) 1982, 2008, Oracle. …

sql oracle build-process plsql oracle11g

32
推荐指数
3
解决办法
5万
查看次数

Oracle SQL:使用Select语句在insert中使用序列

基本上我想运行以下查询:

INSERT INTO historical_car_stats (historical_car_stats_id, year, month, make, model, region, avg_msrp, count)
  SELECT
    my_seq.nextval,
    '2010',
    '12',
    'ALL',
    'ALL',
    region,
    sum(avg_msrp * count) / sum(count),
    sum(count)
  FROM historical_car_stats
  WHERE year = '2010'
        AND month = '12'
        AND make != 'ALL'
  GROUP BY region;
Run Code Online (Sandbox Code Playgroud)

它不起作用,因为"此处不允许序列号"SQL错误.我怎么写这个,以便Oracle让我做我想做的事情?

sql oracle plsql insert sequence

32
推荐指数
2
解决办法
17万
查看次数