명령 프롬프트에서 plsql 컴파일 어떤 식 으로든 sqlplus 열고 명령 또는 @ filename을 작성하여 어떤 식 으로든?명령 프롬프트 (아니 sqlplus)에서 PLSQL 컴파일
우리는 출력을 파일로 가져오고 우리가
감사에서 작업하는 코드 검토 도구를 구문 분석 할 ...
명령 프롬프트에서 plsql 컴파일 어떤 식 으로든 sqlplus 열고 명령 또는 @ filename을 작성하여 어떤 식 으로든?명령 프롬프트 (아니 sqlplus)에서 PLSQL 컴파일
우리는 출력을 파일로 가져오고 우리가
감사에서 작업하는 코드 검토 도구를 구문 분석 할 ...
그나마 그렇게 생각 몇 가지 컴파일러 내부에 대한 피트 피니에 의해 this presentation 참조 . 사용할 수있는 ANTLR 문법 file을 나열합니다.
PL/SQL에 대한 구문 분석기 구현에 대해 약 Scalacombinator에 대해서도 언급했습니다.
잘 모르겠다. 무슨 뜻인지 잘 모르겠다. 실행 결과를 캡처하는 것처럼 들리 겠지만 실제로 SQL * Plus를 완전히 피하고 싶은지는 알 수 없다. 나의 첫번째 독서에서 이것은 다음과 같이 간단하다 :
sqlplus -s user/password @filename > outputfile
... 그러나 그것은 내가 중요한 무엇인가 놓쳤다라고 생각하게한다.
원본 - USER_SOURCE 만 출력하면됩니다.
동적 생성을 많이하고 코드를 추출하고 추가하고 패키지를 다시 컴파일하는 코드를 작성했습니다.
가장 간단한 방법은 CREATE PACKAGE 명령을 동적 SQL로 마무리하는 것입니다.
EXECUTE IMMEDIATE
'CREATE OR REPLACE PACKAGE myPackageName AS '||pPackageSource;
그러나 소스가 하나의 문자열임을 의미합니다. VARCHAR2 라인 (dbms_sql.varchar2s)의 배열을 수용 할 수있는 구형 DBMS_SQL.PARSE 메소드를 사용합니다.
예 - user_source에서 소스를 varchar 2s로 가져온 다음 dbms_sql을 통해 동일한 패키지를 다시 컴파일하는 코드입니다. 는 PL/SQL 코드/데이터베이스가 도달 할 수있는 일 -
DECLARE
lCid INTEGER;
lError INTEGER;
lSource dbms_sql.varchar2s;
FUNCTION fSource(
pName IN VARCHAR2,
pType IN VARCHAR2)
RETURN dbms_sql.varchar2s
IS
CURSOR cSource IS
SELECT RTRIM(text,CHR(10))
FROM user_source
WHERE name = pName
AND type = pType
ORDER BY line;
lSource pp_type.gtyp_ArrayOfSource;
BEGIN
OPEN cSource;
FETCH cSourcee BULK COLLECT INTO lSource;
CLOSE cSource;
RETURN lSource;
END fSource;
BEGIN
lSource := fSource(pName => 'myPackageName',pType => 'PACKAGE');
/* Add CREATE or REPLACE to the start of the source */
lSource(1) := 'CREATE OR REPLACE '||lSource(1);
-- Cannot use EXECUTE IMMEDIATE as this is an ARRAY
lCid := dbms_sql.OPEN_CURSOR;
--
dbms_sql.parse(
c => lCid ,
statement => lSource,
lb => 1,
ub => p_source.count,
lfflg => true,
language_flag => dbms_sql.v7
);
dbms_sql.close_cursor (lCid);
END;
이
쉽게 파일, HTTP 서비스 등의 소스를 추출하기 위해 변경 될 수 있습니다.실제 코드는 확인을 포함하는 결과가 유효한지 확인 이메일가
코드가 실행되어야 USER_SOURCE의 라인에 대해 일치 (USER_ERRORS)에서 오류 등
보안 패키지를 설치할 수있는 권한 - 이는 실행중인 사용자보다 높은 권한을 가진 사용자에 대해 패키지를 설치하는 것을 의미 할 수 있습니다.
이 작업을 수행하는 경우 '정상적인'DB 사용자에게 노출되는 인터페이스에 대해 신중해야합니다. 즉, 일반 사용자가 패키지 소스 또는 권한을 추출하거나 수정할 수 있도록하는 것을 원하지 않습니다.
내 접근 방식은 모든 서비스 기능 (소스, 설치, 동적 실행 등)에 대한 하위 수준의 패키지 (보통 사용자는 볼 수 없음)를 만든 다음 제한된 특정 동작 집합을 귀하의 경우에는 'reviewCode'절차를 공개하는 것과 같을 것입니다.
컴파일 된 pl/sql pogram (바이트 코드 또는 오라클이 소스 코드에서 만드는 모든 것)을 처리하고 싶다고 올바르게 이해합니까? –
OP가 pl/sql을 포함하고있는 스크립트 (unix, windows?)를 실행하려고합니까? 유닉스의 경우 여기에있는 문서를 고려하십시오. –