Cha*_*lie 8 sql oracle sqlplus
我在尝试使用sqlplus将我的sql脚本运行到oracle时遇到问题.该脚本只填充一些虚拟数据:
DECLARE
role1Id NUMBER;
user1Id NUMBER;
role2Id NUMBER;
user2Id NUMBER;
role3Id NUMBER;
user3Id NUMBER;
perm1Id NUMBER;
perm2Id NUMBER;
perm3Id NUMBER;
perm4Id NUMBER;
perm5Id NUMBER;
BEGIN
INSERT INTO PB_USER(USER_ID,USER_NAME, USER_EMAIL, USER_ACTIVEYN)
VALUES(PB_USER_ID_SEQ.nextval, 'RoleDataManagerTests_Username', 'test@test.com',' ');
INSERT INTO ROLES(ROLE_ID, ROLE_NAME)
VALUES(PB_ROLE_ID_SEQ.nextval, 'Test role 1');
INSERT INTO ROLES(ROLE_ID, ROLE_NAME)
VALUES(PB_ROLE_ID_SEQ.nextval, 'Test role 2');
INSERT INTO ROLES(ROLE_ID, ROLE_NAME)
VALUES(PB_ROLE_ID_SEQ.nextval, 'Test role 3');
SELECT ROLE_ID INTO role1Id FROM ROLES WHERE ROLE_NAME = 'Test role 1';
SELECT USER_ID INTO user1Id FROM PB_USER WHERE USER_NAME = 'RoleDataManagerTests_Username';
INSERT INTO USERS_ROLES(USER_ID, ROLE_ID) VALUES(user1Id, role1Id);
SELECT ROLE_ID INTO role2Id FROM ROLES WHERE ROLE_NAME = 'Test role 2';
SELECT USER_ID INTO user2Id FROM PB_USER WHERE USER_NAME = 'RoleDataManagerTests_Username';
INSERT INTO USERS_ROLES(USER_ID, ROLE_ID) VALUES(user2Id, role2Id);
SELECT ROLE_ID INTO role3Id FROM ROLES WHERE ROLE_NAME = 'Test role 3';
SELECT USER_ID INTO user3Id FROM PB_USER WHERE USER_NAME = 'RoleDataManagerTests_Username';
INSERT INTO USERS_ROLES(USER_ID, ROLE_ID) VALUES(user3Id, role3Id);
INSERT INTO PERMISSIONS(PERMISSION_ID, KEY, DESCRIPTION)
VALUES (PB_PERMISSION_ID_SEQ.nextval, 'perm1', 'permission 1');
INSERT INTO PERMISSIONS(PERMISSION_ID, KEY, DESCRIPTION)
VALUES (PB_PERMISSION_ID_SEQ.nextval, 'perm2', 'permission 2');
INSERT INTO PERMISSIONS(PERMISSION_ID, KEY, DESCRIPTION)
VALUES (PB_PERMISSION_ID_SEQ.nextval, 'perm3', 'permission 3');
INSERT INTO PERMISSIONS(PERMISSION_ID, KEY, DESCRIPTION)
VALUES (PB_PERMISSION_ID_SEQ.nextval, 'perm4', 'permission 4');
INSERT INTO PERMISSIONS(PERMISSION_ID, KEY, DESCRIPTION)
VALUES (PB_PERMISSION_ID_SEQ.nextval, 'perm5', 'permission 5');
SELECT PERMISSION_ID INTO perm1Id FROM PERMISSIONS WHERE KEY = 'perm1';
SELECT PERMISSION_ID INTO perm2Id FROM PERMISSIONS WHERE KEY = 'perm2';
SELECT PERMISSION_ID INTO perm3Id FROM PERMISSIONS WHERE KEY = 'perm3';
SELECT PERMISSION_ID INTO perm4Id FROM PERMISSIONS WHERE KEY = 'perm4';
SELECT PERMISSION_ID INTO perm5Id FROM PERMISSIONS WHERE KEY = 'perm5';
INSERT INTO ROLES_PERMISSIONS(ROLE_ID, PERMISSION_ID)
VALUES(role1Id, perm1Id);
INSERT INTO ROLES_PERMISSIONS(ROLE_ID, PERMISSION_ID)
VALUES(role1Id, perm2Id);
INSERT INTO ROLES_PERMISSIONS(ROLE_ID, PERMISSION_ID)
VALUES(role1Id, perm3Id);
INSERT INTO ROLES_PERMISSIONS(ROLE_ID, PERMISSION_ID)
VALUES(role2Id, perm3Id);
INSERT INTO ROLES_PERMISSIONS(ROLE_ID, PERMISSION_ID)
VALUES(role3Id, perm4Id);
INSERT INTO ROLES_PERMISSIONS(ROLE_ID, PERMISSION_ID)
VALUES(role3Id, perm5Id);
END;
/
Run Code Online (Sandbox Code Playgroud)
当我使用Oracle SQL Developer运行它时,我的脚本工作正常但是当我使用sqlplus命令行工具时,这是输出的,然后它就会挂起:
SQL*Plus: Release 11.1.0.7.0 - Production on Tue May 11 09:49:34 2010
Copyright (c) 1982, 2008, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining Scoring Engine
and Real Application Testing options
Run Code Online (Sandbox Code Playgroud)
我正在使用此命令行运行该工具,该工具适用于其他脚本:
sqlplus username/password@server/dbname @Setup.sql
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢.
Ale*_*ole 14
您需要exit在脚本的末尾放置一个,或者将其作为sqlplus username/password@server/dbname < Setup.sql(即重定向的输入<而不是@)运行.您只需在挂起会话中键入"exit"即可检查是否存在问题.
如果它真的挂起了,你是否已经从开发人员提交或回滚执行?
cwa*_*ash 13
我也看到了这个问题,某些脚本可以在像TOAD这样的客户端中执行,但是当通过SQLPlus使用@script指令执行而不是挂起时,SQLPlus客户端会返回一个带有数字的提示符,该提示符对应于正在执行的脚本中的行数(+1).
例如,如果我们执行了一个名为'doit.sql'的脚本,该脚本有70行,我们将使用适当的命令启动SQLPlus并输入:
> @doit.sql
然后我们会看到:
71:
此时按Enter键将返回
72:
我们能够通过输入/提示并按Enter 键来执行这些脚本.