programing

SQL*Plus가 실행 중인 시스템에서 환경 변수를 읽을 수 있습니까?

oldcodes 2023. 10. 16. 22:02
반응형

SQL*Plus가 실행 중인 시스템에서 환경 변수를 읽을 수 있습니까?

데이터베이스 엔진 자체가 다른 시스템에 있고 SQL*Plus가 환경 변수를 직접 읽을 수 있는 방법이 없다는 것을 알고 있지만 클라이언트 자체가 실행 중인 시스템의 환경 변수만 있으면 되는 까다로운 상황에 처해 있습니다.

SQL*Plus에서 실행될 단일 스크립트 내에서 이러한 값을 SQL*Plus 클라이언트로 속이는 방법이 있습니까?스크립트는 시작/종료 PL/SQL 블록 하나로 구성되어 있지만 set/defin/variable sort의 SQL*Plus 명령어를 사용해야 하는 경우에도 문제가 되지 않습니다.

SQL*Plus 실행 파일 자체가 시작되는 방식을 변경하는 것은 불가능합니다(인수로 값을 전달할 수 있는 액세스 권한이 없습니다).

이것을 달성할 수 있는 방법이 있습니까?

참고:dbms_system.get_env()서버 자체에서 환경 변수를 검색하는 것 같습니다. 제가 원하지 않는 것입니다.

컨텍스트에서 몇 가지 클라이언트 관련 내용을 얻을 수 있지만 임의의 환경 변수는 얻을 수 없습니다.

로컬 컴퓨터에 파일을 생성할 수 있는 경우 명령을 사용하여 환경 변수에 따라 대체 변수를 설정할 수 있습니다.

SQL > host echo define homedir=$HOME > /tmp/gethome.sql

SQL > @/tmp/gethome.sql
SQL > host rm -f /tmp/gethome.sql

SQL > select '&homedir.' as home from dual;

HOME
------------
/home/apoole

1 row selected.

그다지 예쁘지는 않지만 명령줄의 변수를 위치 매개 변수로 전달할 수 없다면 옵션이 다소 제한됩니다.

이것은 물론 유닉스-y 경로와 명령어를 사용하는 것이지만 윈도우에서도 같은 종류의 일을 할 수 있습니다.

sqlplus 인수 전달 메커니즘을 통해 변수를 전달할 수 있다면.당신은 다음과 같이 할 수 있습니다.

cat > myscript.sql <<!
select '&1' as HOME from DUAL;
!

sqlplus user/pwd@db @myscript.sql $HOME

Sys_context당신의 문제를 해결해야 합니다.데이터베이스에서 사용자 지정 환경 변수를 설정할 수 있는 방법은DBMS_SESSION.SET_CONTEXT ('MY_NAMESPACE', 'MY_PARAMETER', v_input_parameter);그 다음에 그것을 사용해서 가져옵니다.SYS_CONTEXT ('MY_NAMESPACE', 'MY_PARAMETER');따라서 초기 pl/sql 블록을 실행하여 세션에서 변수를 설정한 후 필요에 따라 사용할 수 있습니다.

여기에서 예를 볼 수 있습니다: http://blog.contractoracle.com/2010/03/using-dbmssessionsetcontext-to-store.html

이 작업은 빈 sql 스크립트를 사용하여 수행할 수 있습니다.

대본이 'getvar'.sql'은 빈 파일이면 됩니다.

sqlplus가 'getvar'와 함께 호출되는 경우.sql', 명령 줄의 모든 것이 명명된 대체 변수에 저장됩니다; &1, &2 등

$  touch getvar.sql

$  sql /nolog @getval "Fred"

SQL*Plus: Release 12.1.0.2.0 Production on Mon Mar 13 13:10:33 2023

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

SP2-0640: Not connected
@ > prompt &1
Fred

언급URL : https://stackoverflow.com/questions/30107510/can-sqlplus-read-environment-variables-from-the-machine-is-it-running-on

반응형