标签: plsql

Pl/SQL:如何对记录表进行排序?

我是 pl/sql 新手!我正在尝试使用简单的冒泡排序算法对记录表进行排序。问题是什么?

在哪里可以找到有关使用记录表的更多信息?

DECLARE
    text VARCHAR2(50);
TYPE TIP_VECTOR
IS
    TABLE OF INT INDEX BY BINARY_INTEGER;
TYPE contorRecord
IS
    record
    (
        codASCII VARCHAR2(3),
        contor   SMALLINT);
TYpe tip_vector2
IS
    TABLE OF contorRecord;
    VECTOR TIP_VECTOR;
    VECTOR2 TIP_VECTOR2 := TIP_VECTOR2();
  aux tip_vector2 := tip_vector2();
    v_char VARCHAR2(3);
    FLAG   BOOLEAN := TRUE;
    t smallint;
    n      SMALLINT := 1;
    ind    SMALLINT := 0;

begin
        AUX.EXTEND(1);
            WHILE(FLAG)
                    LOOP
                    FLAG  := FALSE;
    -- here is the problem; what i'm doing wrong?
                    FOR I IN 1..(vector2.count-1) LOOP 
    -- here …
Run Code Online (Sandbox Code Playgroud)

sorting oracle collections plsql

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

不使用 OR 子句的查询性能

我面临一个问题。我有一个疑问

Select * from tabA 
where (a) in (a,b,c) 
OR b in (a,b,c) 
Run Code Online (Sandbox Code Playgroud)

我想由于此查询而面临性能问题,因为我需要删除 or 条件,所以我尝试使用以下查询:

Select * from tabA 
where (a,b) in (a,b,c) 
Run Code Online (Sandbox Code Playgroud)

但这个查询似乎不起作用,请帮忙。我不想使用“或”条件。

oracle performance plsql

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

在 PL/SQL 中计算布尔值

假设我有一个布尔变量foo。

目前我用IF foo = FALSE THEN ...它来比较一下,但似乎很麻烦。一定有更好的方法!

另一种方法是将变量重命名为not_foo,但这并没有真正使其变得更简单。

有没有办法像这样测试IF !foo THEN ...?

plsql if-statement

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

在 oracle 中的包中创建主体时出错

我有一个包含 specs 和 body 的包。

它的规格是

CREATE OR REPLACE PACKAGE OT.PK_TEST IS
FUNCTION PRNT_STRNG RETURN VARCHAR2;
PROCEDURE PR_SUPERHERO(F_NAME VARCHAR2,L_NAME VARCHAR2);

PROCEDURE PR_new(full_name VARCHAR2);
END PK_TEST;
/
Run Code Online (Sandbox Code Playgroud)

它的身体是:

CREATE OR REPLACE PACKAGE BODY OT.PK_TEST IS
FUNCTION PRNT_STRNG 
RETURN VARCHAR2
IS
BEGIN
RETURN 'SUMAN';
END PRNT_STRNG;
PROCEDURE PR_SUPERHERO(F_NAME VARCHAR2,L_NAME VARCHAR2) 
IS
OLD_NAME VARCHAR2(255);
BEGIN
DBMS_OUTPUT.PUT_LINE(F_NAME);
DBMS_OUTPUT.PUT_LINE(L_NAME);
OT.PR_new(f_name||L_NAME);
DBMS_OUTPUT.PUT_LINE('----------');
OLD_NAME :=OT.PRNT_STRNG;
DBMS_OUTPUT.PUT_LINE(OLD_NAME);
END PR_SUPERHERO;
PROCEDURE PR_new(full_name VARCHAR2)
IS
V_NAME VARCHAR2(255) :=FULL_NAME;
BEGIN

DBMS_OUTPUT.PUT_LINE(V_NAME);
END PR_new;
END PK_TEST;
/
Run Code Online (Sandbox Code Playgroud)

但是当我编译 body 时,我得到的错误是:

[Warning] ORA-24344: …
Run Code Online (Sandbox Code Playgroud)

oracle plsql oracle11g

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

不处理 no_data_found

我有emp表,因为没有记录。我使用了这些表SQL并PL/SQL阻止

SQL> BEGIN
  2   FOR i IN (SELECT * FROM emp WHERE 1=2)    -- emp table having no data
  3   LOOP
  4    dbms_output.put_line('Done');
  5   END LOOP;
  6  EXCEPTION
  7   WHEN no_data_found THEN
  8    dbms_output.put_line('No such value');
  9  END;
 10  /

PL/SQL procedure successfully completed.   -- it shows completed, instead of handling no_data_found

SQL> SELECT * FROM emp
  2  WHERE 1=2;

no rows selected        -- but here it show no rows selected
Run Code Online (Sandbox Code Playgroud)

在 pl/sql 块中,而不是处理no_data_found它显示 …

oracle plsql

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

APEX:提交而不刷新页面

我有一个运行大型查询的交互式报告,执行大约需要 20 秒。

APEX页面有很多筛选项,影响报表中的数据。
该报告使用 PL/SQL 查询(引用页面上的项目)来提取数据。

由于大多数用户在提交前需要设置多个过滤器,我创建了一个Run Report提交和刷新页面的按钮,这样用户在设置多个过滤器时不必多次等待20秒。

问题是,一些过滤器是选择列表。
这些选择列表是基于 PL/SQL 查询填充的,这些查询从数据库中提取数据,并作为查询的一部分引用 APEX 页面上其他项目中的值。

因此,当用户选择其中一个选择列表中的项目时,我需要提交“已更改”的项目,然后刷新页面上的其他过滤器项目,但不刷新整个页面/报告。

Ajax 应该能够做到这一点,对吧?
你如何做到这一点?

我目前有刷新单个项目的动态操作,这似乎有效。
但它不会从数据库中提取正确的数据来填充选择列表,因为它不会首先提交其他过滤器项。

sql oracle ajax plsql oracle-apex

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

是否可以在 PL/SQL 开发人员测试窗口的“声明”块中声明子过程?

我需要测试一个在is块中有几个子过程的存储过程。我已将所有内容复制到测试窗口,但是,将这些子过程放在declare块中似乎不起作用。当我尝试从begin块中调用它们时,我收到一条错误消息,指出它们尚未声明。除了将内容移动is到declare. 我能做什么?

oracle plsql plsqldeveloper

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

如何在 Oracle 中删除多个函数

我想在 Oracle 的 SQL 开发人员中一次从我的数据库中删除多个函数。有没有人知道如何为此创建脚本?

sql database oracle plsql oracle-sqldeveloper

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

面对字符串连接太长的结果

在将数据插入表中时,我面临错误字符串文字太长。因此为了解决这个问题,我使用了串联运算符。例如:值是' || ' too big 但是问题还是没有解决,现在面临字符串拼接的结果太长了。列的数据类型是clob。

Create table testlongstring(name clob)
Insert into testlongstring values('value is too '|| ' big')
Run Code Online (Sandbox Code Playgroud)

面临字符串连接的问题结果太长。

如果我把普通字符串“值太大”它给 strinf litteral 太长了

sql oracle plsql

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

遍历整个表,并将满足内部查询的所有值传递给外部查询

--Pass each of the pmi value from the below query to an outer query.
select pmi 
from support
where supportid = (select supportid 
                   from support 
                   where pmi = '123'
                   order by datereceived DESC
                   fetch first 1 row only)
  and reason ='XYZ'
Run Code Online (Sandbox Code Playgroud)

我有一个特别的多排pmi在我的表support。对于每组pmi,我需要使用该datereceived列查找最新行,然后检查该最新行是否有“XYZ”原因。

仅当原因是最新行中的“XYZ”时,我才必须将该pmi值传递给外部查询。

如果我将 a 硬编码pmi到内部查询中,它会起作用,但我希望内部查询遍历pmi表中的所有内容。

任何帮助,将不胜感激。

sql oracle plsql oracle10g oracle11g

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