所以我在SQL中有表格,我想只列出在yahoo.com上发送电子邮件的人
例如:
EMAIL
------------
1234@yahoo.com
djasjdkl@gmail.com
414353@yahoo.com
12345@gmail.com
78923@msn.com
390214@yahoo.com
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我必须将 oracle db 中的表更新为 10k 的批次。
我试过这个:
BEGIN
WHILE (true) LOOP
UPDATE TOP (10000) CUSTOMERS SET ACTIVE = 'N' WHERE ACTIVE='Y';
IF sql%notfound THEN
EXIT;
END IF;
COMMIT;
END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)
它不起作用,因为 plsql 不支持 top。
有什么建议?
我可以使用SQLDeveloper连接到远程数据库.
我试图从命令行使用sqlcl连接到同一个数据库,但我收到一个错误.
这是我正在运行的命令:
/bin/sql username/pass@delphix-vdb-n-1.va2.b2c.nike.com:1521/vdbsl14
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
/bin/sql username/pass@//delphix.......etc.
Run Code Online (Sandbox Code Playgroud)
这是我收到的错误:
SQLcl: Release 4.2.0.16.131.1023 RC on Wed Jun 15 11:36:33 2016
Copyright (c) 1982, 2016, Oracle. All rights reserved.
USER = username
URL = jdbc:oracle:thin:@delphix-vdb-n-1.va2.b2c.nike.com:1521/vdbsl14
Error Message = Listener refused the connection with the following error:
ORA-12514, TNS:listener does not currently know of service requested in connect descriptor
Username? (RETRYING) ('username/*********@delphix-vdb-n-1.va2.b2c.nike.com:1521/vdbsl14'?)
Run Code Online (Sandbox Code Playgroud)
同样在SQLDeveloper中,我只是在"自定义jdbc url"下输入以下内容并且它连接没有任何问题,所以我希望我可以使用相同的URL通过命令行连接,但到目前为止,它无法正常工作:
jdbc:oracle:thin:@delphix-vdb-n-1.va2.b2c.nike.com:1521:vdbsl4
Run Code Online (Sandbox Code Playgroud) 我有这个匿名 PL/SQL 块,它计算并打印从表中返回的值。
DECLARE
U_ID NUMBER :=39;
RETAIL BINARY_FLOAT:=1;
FLAG NUMBER;
BEGIN
SELECT NVL(RETAIL_AMOUNT,1),UNIT_ID INTO RETAIL, FLAG FROM UNITS WHERE UNIT_ID=U_ID;
LOOP
SELECT NVL(MAX(UNIT_ID),U_ID) INTO FLAG FROM UNITS WHERE FATHER_ID=FLAG;
IF FLAG=U_ID THEN EXIT; END IF;
SELECT RETAIL* RETAIL_AMOUNT INTO RETAIL FROM UNITS WHERE UNIT_ID=FLAG;
EXIT WHEN FLAG=U_ID;
END LOOP;
DBMS_OUTPUT.PUT_LINE( RETAIL);
END;
Run Code Online (Sandbox Code Playgroud)
这个块工作正常,但我想使用 PL/SQL 函数做同样的事情
我写的函数如下:
CREATE OR REPLACE FUNCTION GET_UNIT_RETAIL(U_ID NUMBER)
RETURN NUMBER
IS
RETAIL BINARY_FLOAT:=1;
FLAG NUMBER;
BEGIN
SELECT NVL(RETAIL_AMOUNT,1),UNIT_ID
INTO RETAIL, FLAG
FROM UNITS
WHERE UNIT_ID=U_ID; …Run Code Online (Sandbox Code Playgroud) 登录sqlplus后为什么总是在linux中打印用户名?
$ sqlplus
SQL*Plus: Release 11.2.0.4.0 Production on Fri Apr 7 06:32:57 2017
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Enter user-name: scott
Enter password:
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
USER is "SCOTT"
Run Code Online (Sandbox Code Playgroud)
我不想打印"USER is"SCOTT"".
一个线索是"USER is"这个消息,我可以看到它
/software/oracle/cli-11.02.00.04/sqlplus/mesg/sp2us.msg
sqlplus/mesg/sp2us.msg:572:00291,0, "USER is \"%s\"\n"
Run Code Online (Sandbox Code Playgroud)
我需要在某处更改任何设置吗?
我创建了一个用户并授予它权限,但我无法从 SQL Developer 以该用户身份连接到数据库。
当我在 SQL*Plus 中输入代码时,它显示它已连接,如下图所示

但是,当我在 Oracle SQL Developer 中尝试同样的事情时,它显示我是 SYS 用户。

如何解决这个问题?
编辑
我正在运行最基本的 oracle sql 脚本并在 sqlplus 中运行它。我不明白为什么我的脚本停止提示我输入“为行输入值”。FOR LOOP 不是应该在循环之前打开游标吗?
代码是:
/*
File: myTest.sql
*/
SET SERVEROUTPUT ON SIZE UNLIMITED
SET LINESIZE 140
SET PAGESIZE 60
SET ECHO OFF
SET TERM ON
SET FEEDBACK OFF
SET SHOW ON
SET VERIFY OFF
SPOOL &1
/* Run Parameters & Variables */
DECLARE
text_line VARCHAR2(4000);
/* Cursors & Row Types */
CURSOR myCursor IS
select spriden_pidm, spriden_id, spriden_first_name, spriden_last_name from spriden where spriden_id = '1234';
myCursorRec myCursor%ROWTYPE;
/* Main Logic */
BEGIN
/* Read through …Run Code Online (Sandbox Code Playgroud) 当在KSH中针对Linux上的Oracle 11.2.0.4或更高版本的数据库通过SQLPLUS运行脚本时,是否可以检测DDL语句,退出并回滚所有以前的非DDL语句?所以这将是这样的,但增强了停止第一个DDL.
WHENEVER SQLERROR EXIT ROLLBACK
@script.sql
Run Code Online (Sandbox Code Playgroud)
有没有办法在PLSQL中设置异常处理,以便在第一个DDL语句执行之前立即退出?
我正在尝试在 Ubuntu 18 上使用 Oracle 12c 来学习我的工作。
为此,我正在使用我曾经在其他 PC 上创建的 docker-compose 文件。
version: '2'
services:
database:
image: store/oracle/database-enterprise:12.2.0.1
volumes:
- ./data:/ORCL # persistent oracle database data.
ports:
- 1529:1521
- 8082:8080
- 5500:5500
Run Code Online (Sandbox Code Playgroud)
安装后,我可以以系统管理员身份登录,然后在下面输入这些代码以创建用户。
version: '2'
services:
database:
image: store/oracle/database-enterprise:12.2.0.1
volumes:
- ./data:/ORCL # persistent oracle database data.
ports:
- 1529:1521
- 8082:8080
- 5500:5500
Run Code Online (Sandbox Code Playgroud)
然后,我尝试连接到它。
sqlplus BUS/DEMO_PASS@localhost:1529/ORCLCDB.localdomain
Run Code Online (Sandbox Code Playgroud)
我想像在其他 PC 上一样登录,但不是这样,我收到了这个错误。
ORA-01017: invalid username/password; logon denied
Run Code Online (Sandbox Code Playgroud) 我有蝙蝠脚本:
@echo off
cls
:start
sqlplus user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=X.Y.Z.F)(Port=1521))
(CONNECT_DATA=(SID=some_sid))) @test.sql
goto end
:end
pause 0
Run Code Online (Sandbox Code Playgroud)
和我的test.sql
DECLARE
test varchar2(32000);
BEGIN
test:='value';
DBMS_OUTPUT.PUT_LINE('string test');
DBMS_OUTPUT.PUT_LINE(test||' test');
END;
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到了:
这是什么意思?