Perl에서 정의되지 않은 값에 대해 문자 그대로 '널'을 어떻게 인쇄 할 수 있습니까?
문제
쿼리 '설명 테이블'을 실행 중이며 '기본값'열에 대한 'null'의 값을 반환합니다. 그러나 데이터베이스에서 HTML 테이블로 값을 인쇄하려고하면 'NULL'을 인쇄하지 않습니다. 항상 비어 있습니다.
이것이 데이터베이스에서 데이터를 저장하는 방법입니다.
@nulls = ();
while (($null) = $sth1->fetchrow_array)
{
push (@nulls, $null);
}
배열의 내용을 인쇄 할 때 @nulls
'널'의 문자 값을 인쇄하지 않습니다. 항상 비어 있습니다. 이 문제를 극복 할 수있는 방법이 있습니까?
해결책
Chris J가 말했듯이, 널 값은 정의되지 않은 값으로 반환됩니다.
경고를 활성화 한 경우 값을 인쇄 할 때 "정의되지 않은 인쇄 값"경고를 받았을 것입니다. 사용 strict
그리고 warnings
Pragmata는 많은 시간 디버깅을 절약 할 수 있습니다. 그만큼 diagnostics
Pragma는 표준 경고 및 치명적인 오류에 추가 설명 텍스트를 추가합니다.
데이터베이스에서 나오는 NULL 값을 가두고 교체하는 것은 매우 쉽습니다.
use strict;
use warnings;
my @nulls = ();
while ((my $null) = $sth1->fetchrow_array)
{
# before perl 5.10: use the ternary operator.
push @nulls, defined $null ? $null : 'NULL';
# perl 5.10 adds the defined-or operator: //
push @nulls, $null // 'NULL';
}
또는 당신은 당신의 것을 만들 수 있습니다 @nulls
위에 표시하는 것과 같은 방식으로 배열 한 다음 디스플레이 시간에 널을 변경하십시오.
my @pre_5_10 = map { defined $_ ? $_ : 'NULL' } @nulls;
my @perl_5_10 = map { $_ // 'NULL' } @nulls;
다른 팁
에서 http://metacpan.org/pod/dbi , 널 값을 'undef'로 반환합니다.
나는 perl을하지 않지만 내가 사용한 다른 모든 언어에서는 Null의 값을 테스트해야합니다. NULL 인 경우 문자열 리터럴 "NULL"을 인쇄하십시오.
사용중인 데이터베이스를 말하지는 않지만 Oracle에서 포트할 수없는 솔루션을 신경 쓰지 않으면 SQL 레벨에서 수행 할 수 있습니다.
select NVL(some_column, 'NULL')
from some_table