问题
是否可以用插入替换连接表的所有科尔?比如像这样。
select distinct
p.product_id,
i.filename,
pl.* -- instead of pl.price_tax, pl.price_rec, etc.
from
s_product p
left join s_product_image i on i.product_id = p.product_id
left join s_pricelist_generated_lists pl on pl.product_id = p.product_id
使用Postgres 11.5
编辑
第一个错误。为什么
我是PL/SQL的初学者,从不同的表中获取大量的记录,并希望使用带有批量收集和FORALL的匿名块插入到PL/SQL中的单个表中。有人能帮我决定下面的代码是否正确吗?我参考过许多链接
有两个表'ABC‘和'BCD’,从中获取记录并插入到目标表'DEF‘
ABC表 (A、B、C是列名)
A B C
1 X Z1
2 Y Z2
BCD表
A B C
1 X Z1
2 Y Z2
在目标表'DEF‘中,我必须插入两个表记录。
守则如下:
DECLARE
TYPE FETCH_ARRAY IS TABLE OF A_CUR%RO
我想在pl中进行一个简单的查询,请建议并说明如何使它更快执行(在1000000数据中可能只有0.01秒)。
第一个查询:
select datetime
from product
order by datetime desc
FETCH NEXT 1 ROWS ONLY
第一个查询的结果将在第二个查询中使用。
select *
from traceability
where endtime = [first query]
请帮助我将逻辑实现为pl sql。
谢谢。
MySQL存储过程是:
BEGIN
set @sql=_sql;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
set _ires=LAST_INSERT_ID();
END$$
我尝试将其转换为:
BEGIN
EXECUTE _sql;
SELECT INTO _ires CURRVAL('table_seq');
RETURN;
END;
我得到了错误:
SQL erro
我编写了一个简单的脚本,它将立即杀死甲骨文会话:
DECLARE
v_kill VARCHAR2(32767);
BEGIN
FOR v_kill IN
(SELECT
'alter system kill session '''
||sid
||','
||serial#
||'''',
'immediate;'
我正在开发一个简单的函数,它可以自动更新表格中的内容。
create or replace function total()
returns void as $$
declare
sum int;
begin
sum = (SELECT count(copy_id) FROM copies);
update totalbooks
set all_books = sum
where num = 1;
end;
$$ language plpgsql;
如果我执行"select total();“,它工作得很好,所以我做了一个函数触发器,让它自动更新:
我在使用zend框架mysql查询时遇到了问题。我想要实现的是这个查询
SELECT * FROM `price_list` AS `pl`
GROUP BY
CASE WHEN `pl`.`sub_folder` IS NULL THEN
`pl`.`id`
ELSE
`pl`.`sub_folder`
END
ORDER BY `pl`.`date_added` DESC
以下是我在zend way的尝试
$sql = $this->select()->setIntegrityCheck(false);
$sql->from(array(
是否有其他方法可以使用Oracle SQL Developer从Excel工作表复制数据并将其粘贴到表中!?
现在,我使用(PL/SQL Developer),在select语句的末尾编写(用于更新),例如:
Select * from ABD
for update
然后将Excel中的列粘贴到表中...
关于Adel
我有以下SQL代码: INSERT INTO TIMES (saleDay, dayType)
SELECT saleDate, CASE WHEN h.hd IS NOT NULL THEN 'Holiday'
WHEN to_char(saleDate, 'd') IN (1,7) THEN 'Weekend'
ELSE 'Weekday' END dayType
FROM SALES s LEFT JOIN
(SELECT '01.01' hd FROM DUAL UN
我在PL/SQL Developer中运行查询。如何在PL/SQL中找出sql查询的运行时间。我正在查询特定的表。喜欢
select * from table_name where customer_id=1;
select * from movie_table where movie_id=8;
当我使用PL/SQL时,我想知道查询的运行时间。
谢谢,非常感谢您的帮助。
使用Oracle 12c EE时,如何在DML子查询中使用PL/SQL包类型而不引发异常"ORA-00902:无效数据类型“? 示例模式 --PL/SQL package types.
create or replace package test_pkg as
TYPE type_record IS RECORD(
column1 NUMBER,
column2 NUMBER,
column3 NUMBER);
TYPE type_table IS TABLE OF type_
正如标题所说,我使用的是SQL Server 2008。如果这个问题很基本的话,很抱歉。我使用SQL只有几天时间。现在,我有以下查询:
SELECT TOP 10 p.id, pl.nm, pl.val, pl.txt_val
from dm.labs pl
join mas_data.patients p
on pl.id = p.id
where pl.nm like '%LDL%'
and val is not null
我想要做的是使用select top n以及id列中的不同值。在一些论坛中搜索可以使用
SELECT DISTINCT TOP 1
当我在SQL和PL/SQL (存储过程)中执行下面的查询时,两者都会产生不同的结果。为什么会这样呢?
查询:select UNISTR('\03A6') from dual;
Sql输出Φ where as PL/SQL输出F
我使用sql developer来执行这两个命令。
如何使pl/sql返回Φ
CREATE TABLE table_orjinal as select 1 a,2 b from dual
select * from table_orjinal
CREATE TABLE table_backup as select * from table_orjinal where 1=2;
select * from table_backup
CREATE or REPLACE trigger t_backup
BEFORE INSERT OR DELETE OR UPDATE ON table_orjinal
FOR EACH ROW
ENABLE
BEGIN
我得到了这个错误:
Error starting at line 2 in command:
BEGIN
DELETE * FROM book_copies;
DELETE * FROM books;
/* more code here */
END;
Error report:
ORA-06550: line 2, column 10:
PL/SQL: ORA-00903: invalid table name
ORA-06550: line 2, column 3:
PL/SQL: SQL Statement ignored
ORA-06550: line 3, column
我有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
我试图从一个在存储函数中打开的游标变量中获取数据,但是我总是得到“从序列中取出”错误消息。
以下是存储的函数:
CREATE OR REPLACE FUNCTION test_function RETURN SYS_REFCURSOR AS
p_recordset SYS_REFCURSOR;
BEGIN
OPEN p_recordset FOR SELECT '1' FROM DUAL UNION SELECT '2' FROM DUAL;
RETURN p_recordset;
END TEST_FUNCTION;
而Pro*C代码:
int m
不能解决问题,那是在我的环境中复制的。
my PC在Eclipse SQL Explorer上运行PL/SQL程序的结果
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
如果这个过程也是在上编译的,其他PC也在Eclipse SQL Explorer上编译,那就没事了。
注意:如果您问,为什么Eclipse SQl Explorer -它的历史问题,因为过程不是在Oracle下编译的。
我的环境有什么问题?
谢谢。
如何在UNIX shell脚本中传递PL/SQL块中的变量。这是前-
#!/usr/bin/ksh
declare -a arr=("01", "03", "05", "07", "09", "11")
for i in "${arr[@]}"
do
$ORACLE_HOME/bin/sqlplus -s <<EOF
scott/tiger
set serveroutput on
declare
id = &1
var .........;
我在创建PL/SQL函数时收到以下信息
Warning: compiled but with compilation errors
No errors.
当我查看TOAD中的消息时,我看到以下内容
[Warning] ORA-24344: success with compilation error
17/43 PL/SQL: ORA-00904: "PAGE_DCPN": invalid identifier
2/48 PLS-00201: identifier 'B2BOWNER.SSC_PAGE_MAP' must be declared
16/
我想执行匿名PL/SQL并需要获取结果集对象。我得到了可以通过在PL/SQL块中使用游标来完成的代码。
但是PL/SQL块本身将以文本形式来自数据库。所以我不能编辑PL/SQL块。并且它只返回两个列名始终相同的值。它将返回2列组合值的列表。
在这里,我给出了示例PL/SQL。
BEGIN
RETURN 'select distinct fundname d, fundname r from <table> where condition order by 1';
EXCEPTION
WHEN OTHERS THEN
RETURN 'SELE
有一个新功能允许我编写一个仅在语句持续时间内存在的PL/SQL函数,例如: SQL> with function f return number is
2 begin
3 return 1;
4 end;
5 select f from dual;
6 /
F
----------
1
It is in the documentation that to use this for DML (insert, update, delete
在分配日期时间格式时,我在实现PL/SQL过程时遇到了问题。我指的是我的MySQL存储过程,我是Oracle /SQL的新手。
下面是我从MySQL过程中进行的PL/SQL转换
CREATE OR REPLACE
PROCEDURE "DateTimeSP" (xType IN VARCHAR2, xResult OUT VARCHAR2)
AS
BEGIN
CASE
WHEN xType = 'TIME' THEN
SELECT CURRENT_TIMESTAMP() FROM dual INTO xResult;
我有以下代码:
declare
var_cdb varchar2(3);
var_eleven varchar2(2);
...
..
begin
SELECT to_number(substr(version,1,2)) into var_eleven FROM V$INSTANCE;
if var_eleven > 11
then
select cdb into var_cdb from v$database;
if var_cdb = 'YES'
then
....
但是在Oracle 11g中执行PL/SQL代码时,我得到以下错误:
我试图在PL/SQL中实现这个SQL代码
SQL代码:
select SUM(SUM(distinct inv_total) - SUM(distinct credit_total) ) as TOTAL from invoice
where cus_id =95
group by inv_total, credit_total
PL/SQL代码:
Declare
total invoice.inv_total%TYPE;
cust_id NUMBER := 95;
BEGIN
select SUM(SUM(distinct inv_total) - SUM(distinct cr
在下面的示例中,
variable recordId number;
BEGIN
SELECT MAX(recordvalue)
INTO recordId
FROM sometable;
END;
PRINT recordid;
SELECT *
FROM someothertable
WHERE recordkey = &recordId;
最后一行上的select语句无法访问recordId的值。我知道我可以使用:recordId访问pl/sql块中的recordId,但是有没有办法在不在pl/sql块中的sql语句中访问recordId呢?
我在pl-sql中编写了一个函数来检查是否所有员工的工资都在最高和最低工资的正确范围内。但是它给了我这样的错误: Error(9,3):PL/SQL:语句被忽略。错误(9,16):PLS-00306:调用'>‘时参数的数量或类型错误
CREATE OR REPLACE FUNCTION MIN_MAX_SAL RETURN NUMBER AS
cursor emp_cur is select salary from employees ;
emp_sal emp_cur%rowtype;
min_sal jobs.min_salary%type;
max_sal jobs.ma
我只是想知道是否可以使用散集将数据从一个pl/sql表插入到另一个pl/sql表中?
我正在尝试它,但在概念上似乎是不可能的,唯一的方法是循环遍历Pl/sql表。
任何见解都会很有帮助。谢谢
下面是我正在尝试的简化版本。我想我在这里犯了一些概念上的错误。因此,它不起作用:
DECLARE
TYPE ROWTBL IS TABLE OF BW_COLUMN.NAME%TYPE ;
PL_TBL_ROW ROWTBL;
TYPE COLNAME_TBL IS TABLE OF BW_COLUMN.NAME%TYPE ;
PL_TBL_COLNAME COLNAME_TBL;
BEGIN
在使用join运行这段SQL代码时,我得到一个错误:
ss= 'select project.id from project_list pl '
ss+= ' LEFT JOIN project p ON pl.project_id = p.id '
ss+= ' LEFT JOIN table t ON pl.table_id = t.id '
错误是:
OperationalError: (sqlite3.OperationalError) near "table":
syntax
因此,我正在为oracle编写一个函数,但是我看到了错误,它们说sql语句被忽略了,所以表达式丢失了。
职能:
CREATE OR REPLACE FUNCTION getQueueNumber
(student IN VARCHAR,course IN CHAR)
RETURN INT
IS
queuePosition INT;
date TIMESTAMP;
BEGIN
SELECT waitingDate INTO date
FROM WaitingCourseStudent wcs
WHERE wcs.student=st
我试图通过plsql存储过程将数据从一个表插入到另一个表,这个存储过程将创建一个表,然后插入。但是,我得到一个错误,即SQL命令没有正确结束。请建议一下。
我的存储过程是:
create or replace show errors procedure persons_insert
as
a1 int;
id1 int;
ac int;
fn varchar2(20);
mn varchar2(20);
ln varchar2(20);
gen varchar2(3);
ey varchar2(10);
co
我有一个SQL语句,它在PL/SQL块中执行时提供了非常不同的性能。
SQL非常简单。
INSERT into Existing_Table SELECT col1,col2... from Other_table where rownum < 100000
当它作为SQL执行时,它几乎立即返回。
但是,在匿名PL/SQL块中执行时,它将永远挂起:
begin
INSERT into Existing_Table SELECT col1, col2... from Other_table where rownum < 100000;
end;
/
我正在寻找一种更聪明的方法,在Oracle中将值列表作为表。 我现在做的是 select 'value1' as val from dual
union
select 'value2' from dual 我希望的是一些函数/方法/魔术,例如 select 'value1', 'value2' from dual -- + some additional magic 我正在寻找非PL/SQL的方法,我认为这有点过分了,但如果这是唯一的选择,我不会对PL/SQL说不,但我可以在Create an Oracle function
我有下面的PL/SQL块,它工作得很好。我想从另一个PL/SQL块调用这个函数(TimeToFrame)。
我不能在存储在DB中的过程或包中声明此函数。换句话说,如果pl/sql和pl/sql都是匿名块,我如何从另一个pl/sql调用pl/sql?
如果我把这个函数放在一个单独的.sql文件中会怎么样?我不能从我的匿名块中调用那个.sql文件,并给它传递一些IN参数,然后让那个函数返回OUT参数吗?
Declare
nTime Number;
FUNCTION TimeToFrame(pTime IN Varchar2)
return NUMBER IS
nTime NUMBER;
BEGI
我正在尝试创建一个pl/sql函数来计算employee表中所有工资的总和并返回它。我正在使用sum函数,但得到了一个错误 我已尝试将sql语句更改为此解决方案,但存在堆栈溢出 SELECT (select sum(salary) from employee) INTO total_sum FROM dual; 下面是一个有效的sum语句 SQL> select sum(salary) from employee;
SUM(SALARY)
-----------
281000 下面是Pl/SQL函数 CREATE OR REPLACE FUNCTION total_salary(de
FOR r IN (select 'DRR_DEV.' ||object_name as obj from dba_objects where object_type = 'INDEX'
and owner ='DRR_DEV')
LOOP
l_sql := 'ALTER INDEX '||r.obj||' REBUILD'||'';
execute immediate l_sql;
END LOOP;
在上面的FOR..IN循环中,循环特定模式的所有索引
我编写了PL/SQL代码,只打印大于id=4的记录。我在程序中使用了goto语句,在异常中没有检测到。遇到异常后,请帮我继续这个程序。我的代码是
declare
cursor cur is select * from student;
c student%rowtype;
lt3 exception;
PRAGMA
exception_init(lt3,-77);
begin
open cur;
loop
<<backup>>
fetch cur into c;
if
我将列表传递到我的存储过程中,这样用户就可以选择他们的产品线、制造商和类别来进行搜索。他们不需要提供这个标准,如果他们不提供,那么搜索将在所有这些产品线、制造商和/或类别中进行。我有两个策略,我正在试着决定哪一个更有效。
策略1是动态SQL,我尽量避免使用它,但在阅读Sommarskog文章后,我正在考虑使用它。举个例子。
IF @productLines IS NOT NULL
BEGIN
CREATE TABLE #TempProductLines (lineID uniqueidentifier)
INSERT INTO @TempProductLines