我是 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) 我面临一个问题。我有一个疑问
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)
但这个查询似乎不起作用,请帮忙。我不想使用“或”条件。
假设我有一个布尔变量foo。
目前我用IF foo = FALSE THEN ...它来比较一下,但似乎很麻烦。一定有更好的方法!
另一种方法是将变量重命名为not_foo,但这并没有真正使其变得更简单。
有没有办法像这样测试IF !foo THEN ...?
我有一个包含 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) 我有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它显示 …
我有一个运行大型查询的交互式报告,执行大约需要 20 秒。
APEX页面有很多筛选项,影响报表中的数据。
该报告使用 PL/SQL 查询(引用页面上的项目)来提取数据。
由于大多数用户在提交前需要设置多个过滤器,我创建了一个Run Report提交和刷新页面的按钮,这样用户在设置多个过滤器时不必多次等待20秒。
问题是,一些过滤器是选择列表。
这些选择列表是基于 PL/SQL 查询填充的,这些查询从数据库中提取数据,并作为查询的一部分引用 APEX 页面上其他项目中的值。
因此,当用户选择其中一个选择列表中的项目时,我需要提交“已更改”的项目,然后刷新页面上的其他过滤器项目,但不刷新整个页面/报告。
Ajax 应该能够做到这一点,对吧?
你如何做到这一点?
我目前有刷新单个项目的动态操作,这似乎有效。
但它不会从数据库中提取正确的数据来填充选择列表,因为它不会首先提交其他过滤器项。
我需要测试一个在is块中有几个子过程的存储过程。我已将所有内容复制到测试窗口,但是,将这些子过程放在declare块中似乎不起作用。当我尝试从begin块中调用它们时,我收到一条错误消息,指出它们尚未声明。除了将内容移动is到declare. 我能做什么?
我想在 Oracle 的 SQL 开发人员中一次从我的数据库中删除多个函数。有没有人知道如何为此创建脚本?
在将数据插入表中时,我面临错误字符串文字太长。因此为了解决这个问题,我使用了串联运算符。例如:值是' || ' too big 但是问题还是没有解决,现在面临字符串拼接的结果太长了。列的数据类型是clob。
Create table testlongstring(name clob)
Insert into testlongstring values('value is too '|| ' big')
Run Code Online (Sandbox Code Playgroud)
面临字符串连接的问题结果太长。
如果我把普通字符串“值太大”它给 strinf litteral 太长了
--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表中的所有内容。
任何帮助,将不胜感激。
plsql ×10
oracle ×9
sql ×4
oracle11g ×2
ajax ×1
collections ×1
database ×1
if-statement ×1
oracle-apex ×1
oracle10g ×1
performance ×1
sorting ×1