我在 postgreSQL 中有一个函数,我的函数参数之一是文本类型变量,用双引号括起来,所以我想将此变量插入到表中而不用双引号,当我在网上搜索时,我得到了一个类似的查询, SELECT trim(both ' ' from 'techonthenet.com'); 但是这在双引号的情况下不起作用,所以我将如何从 postgreSQL 函数中的文本字符串变量中删除双引号
使用 PL/SQL,我希望从 select 语句中以编程方式生成 CSV 字符串/varchar 对象。所以 select 语句的输出通常是 1-n 条记录(我只需要一列)。但关键是,我不能使用循环或任何迭代过程,而且必须在不使用外部库的情况下完成。
我可以自由地将数据转换为表格或不同的数据类型,并在需要时使用更多内存。但我不能明确使用循环。
我想我正在寻找一种方法来做这样的事情:
declare
my_csv varchar2(4000);
begin
select implode(my_column,',') into my_csv
from my_table
where some_column = 'some value';
dbms_output.put_line('I got my list: ' || my_csv);
end;
Run Code Online (Sandbox Code Playgroud)
本质上,内爆理论上会像 PHP 内爆函数一样工作,而“,”逗号是我的分隔符。我可以自己定义内爆函数,但同样,我不能明确使用循环。
有任何想法吗?
我有一个 Employee 表,我需要根据某种条件知道员工的数量,该条件将采用 varchar2 的形式
请忽略任何语法错误
procedure getEmpCount( pCondition in varchar2)
begin
--pCondition can be anything say "employee_salaray >30000"
select count(*) from Employee where employee_age > 35 and **pCondition**
end
Run Code Online (Sandbox Code Playgroud)
我怎样才能使上述查询工作。提前致谢
Question :
为什么我们将差异除以 100 以获得以秒为单位的时间?
Start
Get current time(Start Time)
Perform logical transaction
Get current time(End Time)
Subtract End Time – Start Time
Divide it by 100 to get total time in seconds. (Why 100?)
Stop
Run Code Online (Sandbox Code Playgroud)
试试下面的代码:
declare START_TIME PLS_INTEGER;
begin
START_TIME := DBMS_UTILITY.GET_TIME;
DBMS_OUTPUT.PUT_LINE('START_TIME-->'|| START_TIME);
dbms_lock.sleep(10);
DBMS_OUTPUT.PUT_LINE('DBMS_UTILITY.GET_TIME-->'|| DBMS_UTILITY.GET_TIME);
DBMS_OUTPUT.PUT_LINE('execution time --> ' || (dbms_utility.get_time - start_time)/100);
end;
Run Code Online (Sandbox Code Playgroud) 我自己写了一个小的 PL/SQL 实用程序。对一个数据库(我的 Windows 10 笔记本电脑上的 Oracle XE 安装)执行它(使用 SQL-Developer)它工作得很好,但是对另一个数据库(也是 Oracle XE,但在 Linux 服务器上)执行它我收到编译错误我的剧本!?!?怎么可能?
我得到的错误是:
ORA-06550: line 17, column 35:
PLS-00491: numeric literal required
ORA-06550: line 18, column 35:
PLS-00491: numeric literal required
ORA-06550: line 19, column 35:
PLS-00491: numeric literal required
ORA-06550: line 20, column 35:
PLS-00491: numeric literal required
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
Run Code Online (Sandbox Code Playgroud)
引用的位置在我的脚本开头的本节中:
DECLARE
-- limits and boundaries
MAX_NAME_LENGTH CONSTANT NUMBER(3) := 30; -- for table and column …Run Code Online (Sandbox Code Playgroud) 我有这张桌子。只有明细表获得价值;我想得到分支的总和。
ACCOUNT Value
---------- -------------
100
100-01
100-01-01
100-01-01-001 7
100-01-01-006 6
100-01-01-271 5
100-02
100-02-01-001 1
100-02-01-006 2
100-02-01-271 3
Run Code Online (Sandbox Code Playgroud)
喜欢
ACCOUNT Value
---------- -------------
100 24 -- (sum of 100%)
100-01 18 -- (sum of 100-01%)
100-01-01 18 --(sum of 100-01-01%)
100-01-01-001 7
100-01-01-006 6
100-01-01-271 5
100-02 6 -- (sum of 100-02%)
100-02-01-001 1
100-02-01-006 2
100-02-01-271 3
Run Code Online (Sandbox Code Playgroud)
我尝试通过 and 进行 sum 并尝试 sum(value) where account like account||'-%' 但不能结束
declare
vquery long;
cursor c1 is
select * from temp_name;
begin
for i in c1
loop
vquery :='INSERT INTO ot.temp_new(id)
select '''||i.id||''' from ot.customers';
dbms_output.put_line(i.id);
end loop;
end;
/
Run Code Online (Sandbox Code Playgroud)
的输出select * from temp_name是:
ID
--------------------------------------------------------------------------------
customer_id
1 row selected.
Run Code Online (Sandbox Code Playgroud)
我有包含 customer_id 列的客户表。我想将所有 customer_id 插入到 temp_new 表中,但它没有被插入。PLSQL 块成功执行,但 temp_new 表为空。的输出dbms_output.put_line(i.id);是
customer_id
Run Code Online (Sandbox Code Playgroud)
有什么问题吗?
如果我使用相同的 cod_regista 插入多于一行,它会创建重复项,我该如何消除它们?每个值我只需要一个记录
CREATE OR REPLACE TRIGGER piazzetta_trg
BEFORE INSERT OR UPDATE
ON regia_piazzetta
FOR EACH ROW
BEGIN
IF INSERTING THEN
FOR a IN(SELECT cod_regista, SUM(costo_produzione) as tot
FROM regia_piazzetta
GROUP BY cod_regista)
LOOP
INSERT INTO piazzetta_tot VALUES (a.cod_regista, a.tot);
END LOOP;
UPDATE piazzetta_tot SET costo_totale = costo_totale + :new.costo_produzione WHERE piazzetta_tot.id_regista = :new.cod_regista;
END IF;
IF UPDATING THEN
UPDATE piazzetta_tot SET costo_totale = costo_totale+(:new.costo_produzione - :old.costo_produzione) WHERE piazzetta_tot.id_regista = :new.cod_regista;
END IF;
END;
Run Code Online (Sandbox Code Playgroud) CREATE OR REPLACE FUNCTION FN_MULTAS_TOTAL
RETURN INTEGER
IS
V_TOTAL INT;
BEGIN
SELECT SUM(MULTA)
INTO V_TOTAL
FROM DETALLE_ARRIENDO;
RETURN V_TOTAL;
END;
Run Code Online (Sandbox Code Playgroud)
我正在开发 SQL Developer 11,我必须用
exec FN_MULTAS_TOTAL;
Run Code Online (Sandbox Code Playgroud)
并获得一个整数值
请注意:我尝试过其他堆栈溢出问题,但没有解决我的问题......
我收到此错误:PLS-00103: Encountered the symbol "ON" when expecting one of the following使用以下代码:
SET SERVEROUTPUT ON;
DECLARE
v_province VARCHAR(4) := &province;
v_numberOfVisits NUMBER;
v_totallaborcost NUMBER;
BEGIN
findvisitsandlaborcost(v_numberofvisits, v_totallaborcost, v_province);
dbms_output.put_line('Number of visits for province '
|| v_province
|| ': '
|| v_numberofvisits);
dbms_output.put_line('Total labor cost for province '
|| v_province
|| ': '
|| v_totallaborcost);
END;
/
Run Code Online (Sandbox Code Playgroud)
findvisitsandlaborcost定义:
CREATE OR REPLACE PROCEDURE findvisitsandlaborcost (
numberofvisits OUT NUMBER,
totallaborcost OUT NUMBER,
province VARCHAR
) AS
v_numberofvisits si.servinv.servinvno%TYPE;
v_totallaborcost si.servinv.laborcost%TYPE; …Run Code Online (Sandbox Code Playgroud)